spring注解入门
1. 使用Spring注解来注入属性
1.1. 使用注解以前我们是怎样注入属性的
类的实现:
Java代码 复制代码 收藏代码
1.public class UserManagerImpl implements UserManager {
2. private UserDao userDao;
3. public void setUserDao(UserDao userDao) {
4. this.userDao = userDao;
5. }
6. ...
7.}
配置文件:
Java代码 复制代码 收藏代码
1.<bean id="userManagerImpl" class="com.kedacom.spring.annotation.service.UserManagerImpl">
2. <property name="userDao" ref="userDao" />
3.</bean>
4.<bean id="userDao" class="com.kedacom.spring.annotation.persistence.UserDaoImpl">
5. <property name="sessionFactory" ref="mySessionFactory" />
6.</bean>
1.2. 引入@Autowired注解(不推荐使用,建议使用@Resource)
类的实现(对成员变量进行标注)
Java代码 复制代码 收藏代码
1.public class UserManagerImpl implements UserManager {
2. @Autowired
3. private UserDao userDao;
4. ...
5.}
或者(对方法进行标注)
Java代码 复制代码 收藏代码
1.public class UserManagerImpl implements UserManager {
2. private UserDao userDao;
3. @Autowired
4. public void setUserDao(UserDao userDao) {
5. this.userDao = userDao;
6. }
7. ...
8.}
配置文件
Java代码 复制代码 收藏代码
1.<bean id="userManagerImpl" class="com.kedacom.spring.annotation.service.UserManagerImpl" />
2.<bean id="userDao" class="com.kedacom.spring.annotation.persistence.UserDaoImpl">
3. <property name="sessionFactory" ref="mySessionFactory" />
4.</bean>
@Autowired可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作。以上两种不同实现方式中,@Autowired的标注位置不同,它们都会在Spring在初始化userManagerImpl这个bean时,自动装配userDao这个属性,区别是:第一种实现中,Spring会直接将UserDao类型的唯一一个bean赋值给userDao这个成员变量;第二种实现中,Spring会调用setUserDao方法来将UserDao类型的唯一一个bean装配到userDao这个属性。
1.3. 让@Autowired工作起来
要使@Autowired能够工作,还需要在配置文件中加入以下代码
Java代码 复制代码 收藏代码
1.<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
1.4. @Qualifier
@Autowired是根据类型进行自动装配的。在上面的例子中,如果当Spring上下文中存在不止一个UserDao类型的bean时,就会抛出BeanCreationException异常;如果Spring上下文中不存在UserDao类型的bean,也会抛出BeanCreationE
xception异常。我们可以使用@Qualifier配合@Autowired来解决这些问题。
1. 可能存在多个UserDao实例
Java代码 复制代码 收藏代码
1.@Autowired
2.public void setUserDao(@Qualifi


