学习Sring3注解注入详解
来源:互联网 发布:阿里云静态资源库 编辑:程序博客网 时间:2024/06/10 11:56
1.@Autowired注解(不推荐使用,建议使用@Resourse)
@Autowired可以对成员变量、方法、和构造函数进行标注,来完成自动装配的工作。
@Autowired的标注位置不同,他们都会在spring在初始化这个bean时,自动装配这个属性。要使@Autowired能够工作,还需要在配置文件中加入:
<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor" />
当spring容器启动时,AutowiredAnnotationBeanPostProcessor将扫描spring容器中所有的Bean,当发现Bean中拥有@Autowired注释时就找到和其匹配的Bean,
并注入到对应的地方中去。
2.@Qualifier注解
@Autowired是根据类型进行自动装配的。如果当spring上下午中存在不止一个UserDao类型的Bean时,就会抛出BeanCreationException异常;如果上下午中不存在UserDao类型的Bean,也会抛出同样的异常。我们可以使用@Qualifier配合@Autowired来解决这个问题。
1)可能存在多个UserDao实例
Java代码:
- @Autowired
- @Qualifier("userServiceImpl")
- public IUserService userService;
@Autowired
public void setUserDao(@Qualifier("userDao) UserDao userDao){
this.userDao=userDao;
}
2)可能不存在UserDao实例
Java代码
@Autowired(required=true)
public IUserService userService;
3@Resource注解
JSR-250标准注解,推荐使用它来代替Spring专有的@Autowired注解。@Resource的作用相当于@Autowired,只不过@Autowired按类型自动注入,而@Resource默认按byName自动注入。@Resource有两个属性是比较重要的,分别是name和type,Spring将@Resource注解的name属性解析为Bean的名字,而type属性则解析为Bean的类型,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。要使用@Resource能够工作,还需要在配置文件中加入:<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor" />
@Resource装配顺序:
a如果同时指定了name和type,则从Spring上下文中找到唯一匹配的Bean进行装配,找不到则抛出异常。
b如果指定了name,则从上下文中查找名称(id)匹配的Bean进行装配,找不到则抛出异常。
c如果指定了type,则从上下文找到类型匹配的唯一的Bean进行装配,找不到或找到多个,都会抛出异常。
d如果即没有只大牛股name,又没有指定type则自动按照byName方法进行装配。
4@PostConstruct(JSR-250)注解
在方法上加上@PostConstruct,这个方法就会在Bean初始化之后被Spring容器执行。Bean的初始化包括,实例化Bean,并装配Bean的属性。他的一个典型的应用场景是,当你需要往Bean中注入一个其父类中定义的属性,而你又无法复写父类的属性或属性的setter方法时:
- public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
- private SessionFactory mySessionFacotry;
- @Resource
- public void setMySessionFacotry(SessionFactory sessionFacotry)
- {
- this.mySessionFacotry = sessionFacotry;
- }
- @PostConstruct
- public void injectSessionFactory()
- {
- super.setSessionFactory(mySessionFacotry);
- }
- }
- 学习Sring3注解注入详解
- Spring3 注解注入详解
- Spring 3.0 注解注入详解
- Spring 3.0 注解注入详解
- Spring 3.0 注解注入详解
- Spring 3.0 注解注入详解
- Spring 3.0 注解注入详解
- Spring 3.0 注解注入详解
- Spring 3.0 注解注入详解
- Spring 3.0 注解注入详解
- Spring 3.0 注解注入详解
- Spring 3.0 注解注入详解
- Spring 3.0 注解注入详解
- Spring 3.0 注解注入详解
- Spring 3.0 注解注入详解
- Spring 3.0 注解注入详解
- Spring 3.0 注解注入详解
- Spring 3.0 注解注入详解
- 碰到输入错误时,如何清除错误输入,接受正确输入
- 句柄是什么意思?怎么理解?
- Object-C中的类方法和实例方法区别
- sql 字段数据添加、更换 操作
- gradle配置本地mavn仓库 mavenLocal() 时的bug
- 学习Sring3注解注入详解
- canny算子原理分析
- ListView动态加载效果
- 变量的内存存放与作用域
- VxWorks中的任务及调度(五):VxWorks任务调度机制
- unity3d 定时器的使用
- Android的图片压缩类ThumbnailUtils,供源码研究
- 代码的未来----读书笔记(2)
- 开始写博客!!!