Spring实践第五天(基于注解实现bean的自动装配)
说明
如图,项目目录:
注解的方式:
1.目标:用注解的方式来代替bean标签的配置(autowired = ''default'')
2.方式:
- 先在主配置文件,告知要开启注解模式:<context:annotation-config/>
- 在相关的类的方法上加注解
一、在xml文件中加入<context:annotation-config/>标签
1.如果要使用注解,首先要在xml文件中配置注解模式(使项目允许使用注解):
在applicationContext加入<context:annotation-config/>标签
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd"> <!--开启注解模式--> <context:annotation-config/> <!-- 配置我们要管理的bean --> <bean id="UserService" class="com.nenu.service.impl.UserServiceImpl"/> <bean id="userDao" class="com.nenu.dao.impl.UserDaoImpl"/> </beans>
二、在UserServiceImpl中加入注解:
这里着重介绍@Autowired 和 @Resource:
一、@Autowired:
1.使用:
例如在setter方法中加入注解@Autowired:
@Autowired // 这是构造方法,设置userDao属性的值 public UserServiceImpl(UserDao userDao) { this.userDao = userDao; }
2.@Autowired两个相关实验:
最初的UserDao的bean配置:
<bean id="userDao" class="com.nenu.dao.impl.UserDaoImpl"/>
可以通过
(1)修改UserDao层的bean id,例如:
<bean id="userDao1" class="com.nenu.dao.impl.UserDaoImpl"/>
依然可以通过!
(2)配置两个UserDao层的bean:
- 一个是bean id原名,和UserServiceImpl对应的名字
- 另一个起其他的名字,例如:
<bean id="userDao" class="com.nenu.dao.impl.UserDaoImpl"/> <bean id="userDao1" class="com.nenu.dao.impl.UserDaoImpl"/>
还是可以通过!!
(3)配置两个UserDao层的bean:
- 随便起两个和原来bean id不一样的名字:
<bean id="userDao1" class="com.nenu.dao.impl.UserDaoImpl"/> <bean id="userDao2" class="com.nenu.dao.impl.UserDaoImpl"/>
无法通过了!
3.这个实验可以说明的@AutoWired原理:
和xml配置相比,@Autowired对应着 byName or byType ?
- 先会按照byName进行装配
- 如果没有相同的名字,就按照byType来注入
- 而如果没有相同名字,而且有两个bean id就不知道怎样选择了
那么如果容器需要两个不同名字的对象怎么办?
下面我们看@Resource标签。
二、@Resource
1.使用:
例如在setter方法中加入注解@Resource:
@Resource(name = "userDao1") public void setUserDao(UserDaoImpl userDao) { this.userDao = userDao; }这样就可以解决@Autowired解决不了的上述问题了。
总结
今天基于注解实现bean的自动装配就完成啦!小伙伴们有问题欢迎一起探讨!加油~