SpringAnnotation注解之@Resource

@Resource:同样也是注入,默认是按byName,byName找不到的话按byType


1
2
3
4
@Resource
public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
}

xml文件里,没有一个名字为userDao的bean

1
2
3
4
5
6
<bean id="userDaoImpl" class="com.fz.annotation.dao.impl.UserDaoImpl">
</bean>
<bean id="userDaoImpl1" class="com.fz.annotation.dao.impl.UserDaoImpl">
</bean>
<bean id="userService" class="com.fz.annotation.service.UserService">
</bean>

此时测试的时候会报错,因为默认按byName,此时是没有名字为userDao的bean的,所以再次按byType,但是byType会出现两个相同类型的bean

所以会报错。

此时,删掉一个bean的定义

1
2
3
4
<bean id="userDaoImpl1" class="com.fz.annotation.dao.impl.UserDaoImpl">
</bean>
<bean id="userService" class="com.fz.annotation.service.UserService">
</bean>

再次测试的时候就正常,不会报错。

然后,再测试byName

1
2
3
4
<bean id="userDao" class="com.fz.annotation.dao.impl.UserDaoImpl">
</bean>
<bean id="userService" class="com.fz.annotation.service.UserService">
</bean>

此时测试就没问题,因为这里的bean名称为userDao,和参数的名字setUserDao(UserDao userDao)是一样的。


总结:

1、@Resource可以写在属性上,方法上

2、@Resource:默认按byNmae注入,byName找不到则按byType

3、如果按byType找的话,如果找到多个相同类型的bean,则可以指定name来决定使用哪个bean

   @Resource(name="userDaoImpl1")






posted @ 2015-08-25 17:58  Python魔法师  阅读(894)  评论(0编辑  收藏  举报