我有一个名为ABCService的服务接口及其实现名为ABCServiceImpl。
ABCService.class
package com.abc.service.ABCService;
public interface ABCService{
//interface methods
}
ABCServiceImpl.class
package com.abc.service.ABCServiceImpl;
@Service
public class ABCServiceImpl implements ABCService{
// implemented methods
}
XYZ.class
package com.abc.util.XYZ;
public class XYZ{
@Autowired
ABCService abcService;
//methods
}
应用context.xml中
<context: annotation-config>
<context: component-scan base-package="com.abc.service, com.abc.util"/>
但是当我尝试在类XYZ中使用自动装配的ABCService访问接口ABCService中的方法时,我得到一个空指针异常。 然后我从ABCServiceImpl&amp;中删除了@Service注释。将application-context.xml中的实现文件添加为bean&amp;为类XYZ创建了一个bean,并将ABCServiceImpl的bean引用到类XYZ的bean中;它解决了这个问题
应用context.xml中
<bean id="abcService" class="com.abc.service.ABCServiceImpl" />
<bean id="xyz" class="com.abc.util.XYZ" >
<property name="abcService" ref="abcService"></property>
</bean>
但我想使用@Service注释本身而不在application-context.xml中显式定义bean。我该怎么做?
答案 0 :(得分:0)
如果你想在没有包扫描的情况下自动装配bean,或者用XML定义它们,那么你唯一的选择就是使用Spring API以编程方式进行...
这可以使用
XYZ bean = new XYZ();
context.getAutowireCapableBeanFactory().autowireBean(bean);
此外,如果您想要调用任何@PostConstruct方法,请使用
context.getAutowireCapableBeanFactory().initializeBean(bean, null);