bean注入失败,无非是两种情况,要么注入的写法出错,要么被注入的Bean未定义。
1.Bean未定义
如果是直接在XML中配置bean标签的时候
检查id和class是否写对
如果是用注解形式申明Bean
先检查@Controller、@Service、@Repository、 @Component 是否加上其中的一个,
再检查包扫描的路径是否包含有这个类,
再检查配置文件是否在web.xml中有配置,这个可以在项目的启动日志中看到,出现类似Loading XML bean definitions from class path resource [spring-config.xml]的日志,就代表spring-config.xml被启动加载到了。
2.注入写法出错
如果引用都是类名的首字母小写,并且类都是唯一的,那么直接用@Autowired注入
如果出现相同类名,不同实现,需要不同的Name区分的,
比如:
@Resource(name=“userServiceForNew”)
@Resource(name=“userServiceForOld”)
userServiceForNew和userServiceForNew就对于不同bean的id
比如多数据源,j就对于多个不同的sqlSessionFactory,注入的时候就可以用id区分,byName注入
简单说下@Resource和@Autowired的区别
对于一般的Bean注入,用哪个都行
默认@Autowired是按类型type自动注入
默认@Resource是按名字byName自动注入,也可以指定type注入
@Autowired是Spring提供的注解
@Resource是J2EE提供的注解
还有@Qualifier,@Inject等注入的注解,个人认为可以忘记了,记住@Autowired和@Autowired就好了。