`

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源码注释中文

    - **Spring 容器**:探究 BeanFactory 和 ApplicationContext 的区别,以及如何通过它们管理对象的生命周期。 - **数据访问**:了解 Spring 如何整合各种 ORM 和 OXM 框架,以及如何实现数据访问层的事务管理。 ...

    注解和注释以及Spring和SpringMVC常用的注解.rtf

    注解和注释以及Spring和SpringMVC常用的注解 1.两者区别 注解 :参与代码编译,以@开头的。它是给应用程序看的,单独使用注解毫无意义,一定要跟工具一起使用,这个所谓的工具实际就是能读懂注解的应用程序  注释 :...

    《spring+mybatis 企业应用实战》源码、类库全资料

    在企业级应用开发中,Spring 和 MyBatis 是两个非常重要的框架。Spring 作为一个全面的后端开发框架,提供依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等核心功能,极大地提高了开发效率和代码的可维护...

    Spring 注解学习手札(一) 构建简单Web应用

    在本篇《Spring注解学习手札(一)构建简单Web应用》中,我们将深入探讨如何使用Spring框架的注解来构建一个基本的Web应用程序。Spring框架是Java开发中的核心工具,尤其在企业级应用中广泛应用。它简化了依赖注入、...

    Spring注解大全_spring应用层_spring注解大全_控制层注解_

    应用在MVC层(控制层)DispatcherServlet会自动扫描注解了此注解的类,然后将web请求映射到注解了RequestMapping的方法上。Service 组合注解(组合了@Component注解),应用在service层(业务逻辑层)

    spring注解使用详解

    在本文中,我们将深入探讨Spring注解的使用方法,了解如何利用注解来替代XML配置,实现更加高效和灵活的Java应用开发。 ### 1. 注解驱动的配置优势 - **减少配置工作**:注解配置能够利用Java的反射机制,自动获取...

    对Spring中注解怎么实现的一些基本原理

    本文将深入探讨Spring注解的基本原理,包括它们如何被解析、处理以及如何影响应用程序的生命周期。 首先,我们需要了解注解在Java语言中的本质。注解是一种元数据,允许程序员在源代码中嵌入信息,这些信息可以被...

    Spring demo 自动检测注解

    通过分析这个示例,我们可以更好地理解Spring自动检测注解的实际应用。 总结来说,Spring的自动检测注解`@Autowired`是DI的核心特性,通过它,我们可以方便地管理bean之间的依赖关系,提高代码的可测试性和可维护性...

    Spring 注解 方式配制的小demo

    尽管我们无法直接访问这个链接,但我们可以基于常见的Spring注解配置实践来解释相关概念。 1. `@Component`:这是Spring中的基础注解,用于标记一个类为Spring管理的bean。它的子注解包括`@Service`、`@Repository`...

    spring源码(注释+测试版)

    这份"spring源码(注释+测试版)"提供了Spring框架的源代码,带有注释和测试用例,对于开发者深入理解Spring的工作原理非常有帮助。 1. **spring-core**:这是Spring框架的基础模块,包含了核心的工具类和资源处理...

    spring2.5.6注解以及xml简单ioc入门示例

    Spring框架是Java开发中广泛应用的一个轻量级框架,它的核心特性是依赖注入(Dependency Injection,简称DI),也称为控制反转(Inversion of Control,简称IoC)。在Spring 2.5.6版本中,引入了对注解的支持,使得...

    spring源码中英文注释

    通过阅读源码和注释,我们可以更清晰地了解Spring如何管理依赖注入、AOP(面向切面编程)、事务管理、上下文以及其他的特性。 1. **依赖注入(Dependency Injection, DI)**:Spring的核心特性之一,允许组件之间...

    Spring注解注入属性

    ### Spring注解注入属性 #### 一、传统方式与注解方式对比 在Spring框架中,依赖注入(DI)是一种核心的设计模式,用于促进松耦合的系统设计,使得组件之间的依赖关系可以在运行时动态地建立,而不是在编译时硬...

    spring注解+spring data jpa文档+JPA文档.rar

    Spring注解是Spring框架中的一大特色,它极大地简化了配置过程,让代码更加简洁易读。注解如`@Component`、`@Service`、`@Repository`和`@Controller`用于标记不同层次的Bean,而`@Autowired`则负责自动装配Bean之间...

    spring 源码中文注释

    这份"spring 源码中文注释"包含了对Spring框架源码的详细解读,对于理解其工作原理、优化代码以及定制化开发具有重要意义。 首先,我们来看看Spring的核心组件——IoC容器。IoC容器是Spring的核心,它负责管理对象...

    dwr+spring 注解方式

    1. **Spring注解配置**: - `@Configuration`:标记一个类为Spring配置类,可替代传统的XML配置。 - `@ComponentScan`:用于扫描指定包下的所有@Component及其子注解(如@Service、@Repository、@Controller)的类...

    spring注解笔记

    总结来说,Spring注解提供了声明和注册Bean的简洁方式,通过这些注解,我们能够方便地进行依赖注入和组件扫描,极大地简化了Spring应用的配置工作。同时,理解每个注解背后的原理及使用场景对于开发高效且可维护的...

    spring注解整理,及应用

    Spring 注解整理及应用 Spring 框架中提供了许多注解来简化开发过程,这些注解可以分为多个类别,如 Controller、Service、DAO 等。下面我们将对 Spring 中常用的注解进行整理和解释: 一、Controller 相关注解 *...

    Spring 注解 入门

    Spring注解是Spring框架中的一个重要特性,它极大地简化了配置,提高了代码的可读性和可维护性。在本文中,我们将深入探讨如何使用Spring注解进行属性注入,并重点关注`@Autowired`和`@Qualifier`这两个关键注解。 ...

Global site tag (gtag.js) - Google Analytics