`
justin.xxt
  • 浏览: 26898 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

spring中的annotation

阅读更多

1. spring自己定义的注释@Autowired, @Qualifier

当注释用在bean的属性上时,可以省略bean中的setter/getter方法,而且在<bean>定义中也不需要再指定property属性了,容器会自动装配。

@Autowired默认是byType的,当采用该标记时,如果发现没有匹配的bean可用,或者有多于一个的bean可用,则spring容器在启动的时候会报BeanCreationException异常。例如有如下bean,

public class Boss
{
	@Autowired
	private Office office;
	
	@Autowired
	private Car car;
}

当使用@Autowired注释这两个属性的时候,如果在容器中没有Office/Car bean的定义,或者有多于一个的Office/Car bean的定义,spring容器在启动初始化Boss bean的时候就会报BeanCreationException。

为了解决这个问题,spring提供了@Qualifier注释。当结合使用了@Qualifier注释时,自动注入的策略就由byType变为byName了,如下:

public class Boss
{
	@Autowired
	private Office office;
	
	@Autowired
	@Qualifier("newCar")
	private Car car;
}

这时如果有多个Car bean的定义,容器只会使用id为"newCar"的Car bean对Boss进行装配。

为了使用@Autowired注释,需要配置一个BeanPostProcessor对@Autowired进行解析,这个BeanPostProcessor就是AutowiredAnnotationBeanPostProcessor,因此需要添加如下配置:

<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

 

2. JSR-250规范定义的注释@Resource, @PostConstruct, @PreDestroy

@Resource和@Autowired一样,不过默认方式是byName, @Autowired默认是byType的。上面的Boss bean可以采用@Resource如下定义:

public class Boss
{
	@Resource
	private Office office;
	
	@Resource(name="newCar")
	private Car car;
	
}

指定容器在bean的初始化之后或者销毁之前应该执行的方法可以有如下三种方式:

- 实现InitializingBean/DisposableBean接口中的afterPropertiesSet()/destroy()方法

- 通过bean定义文件的init-method/destroy-method指定方法

- 通过@PostConstruct和@PreDestroy来注释相应的方法(通过该注释可以标注多个init/destroy方法)

为了使用这些JSR-250定义的注释,需要在容器中注册一个BeanPostProcessor,如下:

<bean class="org.springframework.context.annotation.CommonAnnotationBeanPostProcessor"/>

 

3. 上面提到的两个BeanPostProcessor也可以通过如下配置来实现在容器中的注册,而不需要专门的两个bean定义。

<context:annotation-config/>

<context:annotation-config/>将隐式地像spring注册AutowiredAnnotationBeanPostProcessor, CommonAnnotationBeanPostProcessor, PersistenceAnnotationBeanPostProcessor, equiredAnnotationBeanPostProcessor这4个BeanPostProcessor。

在配置文件中使用 context 命名空间之前,必须在 <beans> 元素中声明 context 命名空间:

xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context/spring-context-2.5.xsd"
 

4. @Component

使用@Component来注释一个类,效果上相当于将该类注册到spring容器中。@Component带有一个可选的参数,用于指定bean的名称,如@Component("boss"),则可以通过"boss"从容器中取得Boss类的实例。

为了使用@Component注释,需要在<beans>中引入如下配置:

<context:component-scan base-package="...">

spring会自动扫描base-package指定的包及子包下面所有标记了@Component的类并自动注册到容器中。

使用了上面的配置之后,就不必再有<context:annotation-config/>配置了,因为<context:component-scan>会自动隐式地注册AutowiredAnnotationBeanPostProcessor和CommonAnnotationBeanPostProcessor。

<context:component-scan>还可以指定要扫描的包、类的filter,如下:

<context:component-scan base-package="...">
    <context:include-filter type="regex" expression="..."/>
    <context:exclude-filter type="aspectj"expression="..."/>
</context:component-scan>

默认地,@Component标注的bean都是singleton的,可以通过@Scope("prototype")来改变,如下:

@Component("boss")
@Scope("prototype")
public class Boss
{
    // ...
}

 

5. Spring MVC中的annotation

 

 

 

分享到:
评论

相关推荐

    Spring_Annotation_AOP

    在本资料"Spring_Annotation_AOP"中,我们将深入探讨Spring框架如何利用注解实现AOP,以及其背后的原理和实践应用。 面向切面编程(AOP)是一种编程范式,旨在提高代码的可维护性和可重用性,通过将关注点分离,...

    spring的Annotation注解.

    ### Spring框架中的Annotation注解详解 #### 一、Spring与Annotation的基本概念 Spring框架通过引入Annotation,极大地简化了Java开发中的依赖注入(Dependency Injection, DI)和面向切面编程(AOP)的过程。...

    Spring MVC Annotation验证的方法

    Spring MVC Annotation验证方法 Spring MVC 框架提供了多种验证方法,其中一种常用的方式是使用Annotation验证。本文将详细介绍 Spring MVC Annotation验证的方法,包括使用 Spring MVC 自带的 Annotation 验证和...

    spring 的Annotation方式

    ### Spring的Annotation方式详解 #### 引言 随着Spring框架的发展,其依赖注入(DI)机制也经历了从XML配置向注解驱动的重大转变。自Spring 3.0版本起,框架引入了一系列注解来简化依赖配置,使得开发人员能够在不...

    Spring的Annotation配置相关讲义

    在Spring框架中,Annotation配置是一种简洁且强大的方式来管理Bean的定义和依赖注入,它消除了传统的XML配置文件,使得代码更加简洁、易读。在Spring 3.0及以上版本中,Annotation配置得到了广泛的应用。 首先,...

    Spring Annotation简介一

    1. **依赖注入(Dependency Injection, DI)**:Spring Annotation中最常用的注解之一是`@Autowired`,它实现了自动装配bean。当在类的字段或构造器上使用`@Autowired`时,Spring会自动寻找类型匹配的bean并注入。...

    Spring+mybatis annotation形式

    在Java Web开发中,Spring和MyBatis是两个非常重要的框架。Spring是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、事务管理等功能;而MyBatis则是一个轻量级的持久层框架,它将SQL与Java代码分离,...

    Spring annotation

    Spring框架是Java开发中不可或缺的一部分,它通过提供丰富的注解简化了依赖注入、配置管理和AOP(面向切面编程)等任务。本文将深入探讨Spring注解及其在实际开发中的应用。 1. **依赖注入(Dependency Injection, ...

    Spring IOC Annotation 注入 学习实例

    在`IOC_Project`这个压缩包文件中,很可能是包含了一个示例项目,用于演示如何使用Spring的IOC Annotation注入。通过查看和运行这个项目,你可以更深入地了解这些概念并实践它们。项目的结构可能包括了源代码文件(`...

    spring的annotation-driven配置事务管理器详解 (多数据源配置

    在多数据源配置中,spring 的 Annotation-Driven 配置事务管理器可以帮助我们轻松地管理多个数据源的事务。 在 Spring 框架中,事务管理器是通过 `&lt;tx:annotation-driven&gt;` 元素来配置的。在多数据源配置中,我们...

    spring annotation注解

    Spring Annotation 注解 Spring 框架中的注解是用于在 Java 类中添加元数据的,通过这些元数据,Spring 框架可以在运行时提供更多的功能。 Spring 框架提供了多种类型的注解,例如 @Autowired、@Resource、@...

    Spring 常用 Transaction Annotation

    在Spring XML配置文件中,需要定义`&lt;tx:annotation-driven&gt;`元素,或者在Java配置类中添加`@EnableTransactionManagement`注解。 在实际应用中,需要注意事务的边界和异常处理。例如,当一个方法抛出未检查异常...

    struts2 hibernate3 spring2.5 annotation 整合

    Struts2、Hibernate3和Spring2.5是Java Web开发中的三大框架,它们各自负责不同的职责,但可以协同工作以构建高效的企业级应用。这里主要讨论的是如何将这三者结合,并利用注解(Annotation)进行配置,以简化开发...

    详解Spring基于Annotation的依赖注入实现

    技术分享:详解Spring基于Annotation的依赖注入实现

    利用 spring annotation AOP 反射 记录日志

    在IT行业中,Spring框架是Java开发中的核心工具之一,它为开发者提供了许多强大的功能,包括依赖注入、面向切面编程(AOP)等。本文将深入探讨如何利用Spring的注解式AOP和反射机制来实现日志记录,以便更好地理解和...

    SpringMVC Spring MyBatis 框架整合 Annotation Maven Project

    在IT行业中,SpringMVC、Spring和MyBatis是三个非常重要的Java开发框架,它们各自在Web应用的各个层面上发挥着关键作用。本项目是一个整合了这三个框架的基于Annotation和Maven的项目,旨在提供一种高效、灵活的开发...

    Spring - Annotation 自动匹配注入IOC

    在Spring框架中,注解(Annotation)自动匹配注入IoC(Inversion of Control,控制反转)是一种关键特性,它极大地简化了Java应用的配置管理。本文将深入探讨这一主题,帮助开发者更好地理解和利用这一功能。 首先...

    详解Spring_3.0基于Annotation的依赖注入实现

    ### 详解Spring 3.0基于Annotation的依赖注入实现 #### 概述 Spring框架作为一个广泛使用的Java开发框架,提供了强大的依赖注入(Dependency Injection, DI)能力,帮助开发者轻松管理和组织复杂的Java应用。随着...

Global site tag (gtag.js) - Google Analytics