Не удается получить инъекцию зависимости Spring для работы - PullRequest
0 голосов
/ 01 января 2012

Я в основном новичок в Spring, поэтому не думайте, что только потому, что я не упомянул что-то, я, вероятно, все равно это сделал.

Я пытаюсь заставить внедрение зависимостей работать,Я получил spring.xml со следующим содержимым:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.1.xsd">

<context:annotation-config/>
<bean id="connection" class="richo.project.ConnectionImpl"/>
</beans>

и затем в своем коде у меня есть:

private IConnection conn;
@Resource(name="connection")
public void setConn(IConnection conn){
this.conn = conn;
}

и когда я пытаюсь использовать объект conn в моем кодеЯ получаю nullpointerexception

Имейте в виду, что я на самом деле не знаю, работает ли Spring, я использую IntelliJ, и он поместил 13 jar-файлов, связанных с пружиной, в мою директорию lib, но я не могу на самом делескажите, если Spring даже пытается что-то сделать

Ответы [ 2 ]

2 голосов
/ 01 января 2012

Недостаточно иметь Spring в вашем classpath, чтобы сделать эту работу.

Вы должны попросить Spring изготовить объект, который вам нужен, для выполнения любых аннотаций. Либо это происходит в контейнере Spring, но для автономных приложений вам необходимо иметь контекст Spring (например, AnnotationConfigApplicationContext) и запрашивать его с помощью метода getBean().

0 голосов
/ 01 января 2012

Во-первых, ваш код не компилируется.Он должен соответствовать соглашениям JavaBeans, и поэтому метод должен быть

public void setConn(IConnection conn){
    this.conn = conn;
}

Теперь, просто потому, что у вас есть XML-файл Spring, а Spring jar в вашем classpath не делает Spring волшебным образом запускающим и внедряющим зависимости.Вам необходимо загрузить контекст приложения и загрузить как минимум один компонент из этого контекста.В этот бин будут рекурсивно вставлены все его зависимости.

См. http://static.springsource.org/spring/docs/3.1.x/spring-framework-reference/htmlsingle/spring-framework-reference.html#beans-factory-instantiation для примера.

...