Java 针对接口的自动连接返回null-Spring MVC
我正在从事这个Java 针对接口的自动连接返回null-Spring MVC,java,spring,spring-mvc,autowired,Java,Spring,Spring Mvc,Autowired,我正在从事这个Spring MVC项目,在这个项目中,我很难通过Dao实现的接口将这个Dao类自动连接到控制器中。这是我的spring config.xml的一部分。我正在使用aspectJ,注释和TX管理 <aop:aspectj-autoproxy /> <context:component-scan base-package="com.simulator" /> <context:annotation-config /> <tx:annotatio
Spring MVC
项目,在这个项目中,我很难通过Dao
实现的接口将这个Dao
类自动连接到控制器中。这是我的spring config.xml
的一部分。我正在使用aspectJ
,注释
和TX管理
<aop:aspectj-autoproxy />
<context:component-scan base-package="com.simulator" />
<context:annotation-config />
<tx:annotation-driven />
<context:property-placeholder
location="classpath*:config.properties" />
<bean id="oidDao" class="com.simulator.service.OidDao">
<property name="ipaddressNC" value="${ipaddressNC}" />
<property name="ipaddressOM" value="${ipaddressOM}" />
</bean>
经理:
控制器:
我试图重用Dao,因此我不想从每个方法多次调用ApplicationContext。我做错了什么?如果我将变量getipaddress nc、getipaddress om
设为静态,则自动布线
工作,如果不是,则oim
返回null,尽管变量在应用程序加载时通过setters
初始化。您对OIDAO
使用了组件扫描和手动接线。您在xml配置中定义了OIDAO
,如下所示:
<bean id="oidDao" class="com.simulator.service.OidDao">
<property name="ipaddressNC" value="${ipaddressNC}" />
<property name="ipaddressOM" value="${ipaddressOM}" />
</bean>
@Component
public class OidDao implements OidManager {
...
}
放下组件
注释,我想你会没事的!否则,
将选择OidDao
并使用默认构造函数从中实例化一个实例,而无需调用setters
您使用的是@Component annotation+,您还定义了一个bean。因此实际上创建了两个bean。由于使用@Component而创建的组件的属性将设置为“null”。这是预期的,因为您没有将属性设置为任何值。删除@Component annotation并在bean定义上使用“autowire candidate=“true”属性,或者删除XML中的bean定义,并在类上使用相关注释将属性设置为属性文件中的正确值。将bean定义更改为:
<bean id="oim" class="com.simulator.service.OidDao">
<property name="ipaddressNC" value="${ipaddressNC}" />
<property name="ipaddressOM" value="${ipaddressOM}" />
</bean>
让它创建id为oim
的bean,该bean可以设置为控制器中的属性oim
。非常好。这就成功了。但是setter在dao类中被调用,变量被初始化,但是当从控制器调用时,它返回null。该值没有保留在内存中。很高兴它能工作,如果您投票并接受答案,我将不胜感激:)谢谢您的澄清
<bean id="oidDao" class="com.simulator.service.OidDao">
<property name="ipaddressNC" value="${ipaddressNC}" />
<property name="ipaddressOM" value="${ipaddressOM}" />
</bean>
@Component
public class OidDao implements OidManager {
...
}
<bean id="oim" class="com.simulator.service.OidDao">
<property name="ipaddressNC" value="${ipaddressNC}" />
<property name="ipaddressOM" value="${ipaddressOM}" />
</bean>