首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

spring 的注入有关问题,请大神指教

2013-09-07 
spring 的注入问题,请大神指教一个action类中....@Resourceprotected DepartmentService departmentServic

spring 的注入问题,请大神指教
一个action类中
....
@Resource
protected DepartmentService departmentService;
......

DepartmentServiceImpl是DepartmentService 的实现类
使用组件自动扫描机制
@Service
DepartmentServiceImpl

我没有显示指定 departmentService 指向的是DepartmentServiceImpl的对象,为什么Spring帮我这样做了,假如DepartmentService 有多个实现类,spring会怎么装配。 spring
[解决办法]
@Resource应用在setter上(应用到属性),则注入规则是:
   a.先使用属性名字匹配bean,查找到bean则注入,如果类型不匹配则此时有异常,注入失败
   b.如果属性名字没有匹配到Bean则spring会尝试采用属性参数类型匹配,如果找打bean则注入,如果属性参数类型是接口则有可能会匹配到多个类型,则会抛出匹配到多个
bean的异常.注入失败.

如果intefaces 有多个实现,且自己不指定具体哪个实现,就会报错。
[解决办法]
虽然没有显式指定,但实际上DepartmentServiceImpl实现了DepartmentService就等于是指定了,如果多个实现类的话不妨试一下,按楼上说的,会报错,我觉得也是
[解决办法]
如果多个类的话会报NoUniqueBeanDefinitionException异常,因为,如果你的@Resource注解不注明名字的话,spring默认在bean容器中按名字查找对应bean,找不到的话,会转为按类型查找对应的bean,也就是spring自动去找对应接口的实现类,但如果你的多个类实现了注解@Resource下的接口的话,就会出现错误,也就是上面的这个异常,由异常名字我想你知道什么意思了吧?

热点排行