当前位置:首页 > 开发 > 系统架构 > 架构 > 正文

Spring 注解区别以及应用

发表于: 2015-07-19   作者:BlueSkator   来源:转载   浏览:
摘要: 1. @Autowired @Autowired是根据类型进行自动装配的。如果当Spring上下文中存在不止一个UserDao类型的bean,或者不存在UserDao类型的bean,会抛出 BeanCreationException异常,这时可以通过在该属性上再加一个@Qualifier注解来声明唯一的id解决问题。   2. @Qualifier 当spring中存在至少一个匹

1. @Autowired

@Autowired是根据类型进行自动装配的。如果当Spring上下文中存在不止一个UserDao类型的bean,或者不存在UserDao类型的bean,会抛出 BeanCreationException异常,这时可以通过在该属性上再加一个@Qualifier注解来声明唯一的id解决问题。

 

2. @Qualifier

当spring中存在至少一个匹配的bean时,通过 @Qualifier("XXX") 注释指定注入 Bean 的名称,这样歧义就消除了。

所以 @Autowired 和 @Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName 了。

@Autowired 可以对成员变量、方法以及构造函数进行注释,而 @Qualifier 的标注对象是成员变量、方法入参、构造函数入参。

 

3. @Resource(JSR-250标准注解,推荐使用它来代替Spring专有的@Autowired注解)

Spring 不但支持自己定义的@Autowired注解,还支持几个由JSR-250规范定义的注解,它们分别是@Resource、@PostConstruct以及@PreDestroy。 @Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource可自定义装配方式,分别是name和type。可以单独定义其中一种也可以同时定义两种,对于用户自定义时,找不到则抛出异常。如果既没有指定name也没有指定type。则自动按照byName方式进行装配(见2);如果没有匹配,则回退为一个原始类型(UserDao)进行匹配,如果匹配则自动装配;

 

4. @PostConstruct(JSR-250)

@PostConstruct(JSR-250)在方法上加上注解@PostConstruct,这个方法就会在Bean初始化之后被Spring容器执行(注:Bean初始化包括,实例化Bean,并装配Bean的属性(依赖注入))。它的一个典型的应用场景是,当你需要往Bean里注入一个其父类中定义的属性,而你又无法复写父类的属性或属性的setter方法时,如:

1
2
3
4
5
6
7
8
9
10
11
12
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);  
     }  
     ...  
}

这里通过@PostConstruct,为UserDaoImpl的父类里定义的一个sessionFactory私有属性,注入了我们自己定义的sessionFactory(父类的setSessionFactory方法为final,不可复写),之后我们就可以通过调用 super.getSessionFactory()来访问该属性了。

 

5. @PreDestroy

在方法上加上注解@PreDestroy,这个方法就会在Bean初始化之后被Spring容器执行。一般都同@PostConstruct。

 

6. @Component

 是所有受Spring 管理组件的通用形式,@Component注解可以放在类的头上,@Component不推荐使用。

 @Component是所有受Spring管理组件的通用形式,Spring还提供了更加细化的注解形式:@Repository、@Service、@Controller,它们分别对应存储层Bean,业务层Bean,和展示层Bean。目前版本(2.5)中,这些注解与@Component的语义是一样的,完全通用,在Spring以后的版本中会给它们追加更多的语义。所以,推荐使用@Repository、@Service、@Controller来替代

Spring 注解区别以及应用

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
基于注释(Annotation)的配置有越来越流行的趋势,Spring 2.5 顺应这种趋势,提供了完全基于注释配
近来工作发生了一些变化,有必要学习一下Spring注解了! 网上找了一些个例子,总的说来比较土,大多
近来工作发生了一些变化,有必要学习一下Spring注解了! 网上找了一些个例子,总的说来比较土,大多
近来工作发生了一些变化,有必要学习一下Spring注解了! 网上找了一些个例子,总的说来比较土,大多
之前为大家介绍了如何使用spring注解来进行缓存配置 (EHCache 和 OSCache)的简单的例子,详见 Spr
之前为大家介绍了如何使用spring注解来进行缓存配置 (EHCache 和 OSCache)的简单的例子,详见 Spr
之前为大家介绍了如何使用spring注解来进行缓存配置 (EHCache 和 OSCache)的简单的例子,详见 Spr
(转自 by:snowolf) 先来构建一个极为简单的web应用,从controller到dao。不考虑具体实现,只是先
近来工作发生了一些变化,有必要学习一下Spring注解了! 网上找了一些个例子,总的说来比较土,大多
近来工作发生了一些变化,有必要学习一下Spring注解了! 网上找了一些个例子,总的说来比较土,大多
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号