ISSUE:
我正在尝试将服务注入bean,但服务实例始终为null。
背景
我有两个豆子从另一个叫来。这是它们在XML配置中的定义方式:
<context:annotation-config />
<bean class="com.test.MyBeanImpl" name="myBean"/>
<bean id="myService" class="com.test.MyServiceImpl" />
并且bean实现如下:
MyServiceImpl.java
class MyServiceImpl implements MyService {
public void getString() {
return "Hello World";
}
}
MyBeanImpl.java
@Component
class MyBeanImpl implements MyBean, SomeOtherBean1, SomeOtherBean2 {
@Resource(name="myBean")
private MyService myService;
public MyBeanImpl() {}
}
问题:
是否有一些与我的bean实现3个接口阻止服务被注入这一事实相关的原因?如果没有其他因素可能影响它?
答案 0 :(得分:6)
正在使用注释只需使用@Service
注释标记服务类并使用@Autowired
注释来获取服务类的实例
的 MyServiceImpl.java 强> 的
package com.mypackage.service;
@Service
class MyServiceImpl implements MyService {
public void getString() {
return "Hello World";
}
}
的 MyBeanImpl.java 强> 的
@Component
class MyBeanImpl implements MyBean, SomeOtherBean1, SomeOtherBean2 {
@Autowired
private MyService myService;
public MyBeanImpl() {}
}
还要确保在调度程序文件的<context:component-scan />
元素中提及您的包名称
<context:annotation-config />
<context:component-scan base-package="com.mypackage" />
希望这能解决您的问题
答案 1 :(得分:1)
确保注入MyService
的bean是bean。
/* This must be a bean, either use @Component or place in configuration file */
@Component
public class SomeClass{
@Resource
private MyService myService;
}
还要确保在配置中指定应用程序使用基于注释的配置:
<context:annotation-config/>
由于您使用多个接口,因此最好使用名称来限定bean:
<bean class="com.test.MyBeanImpl" name="myBean" />
然后在@Resource
注释
@Resource(name="myBean")
private MyService myService;
这是解释这些概念的Github Gist。