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框架如何利用注解实现AOP,以及其背后的原理和实践应用。 面向切面编程(AOP)是一种编程范式,旨在提高代码的可维护性和可重用性,通过将关注点分离,...
### Spring框架中的Annotation注解详解 #### 一、Spring与Annotation的基本概念 Spring框架通过引入Annotation,极大地简化了Java开发中的依赖注入(Dependency Injection, DI)和面向切面编程(AOP)的过程。...
Spring MVC Annotation验证方法 Spring MVC 框架提供了多种验证方法,其中一种常用的方式是使用Annotation验证。本文将详细介绍 Spring MVC Annotation验证的方法,包括使用 Spring MVC 自带的 Annotation 验证和...
### Spring的Annotation方式详解 #### 引言 随着Spring框架的发展,其依赖注入(DI)机制也经历了从XML配置向注解驱动的重大转变。自Spring 3.0版本起,框架引入了一系列注解来简化依赖配置,使得开发人员能够在不...
在Spring框架中,Annotation配置是一种简洁且强大的方式来管理Bean的定义和依赖注入,它消除了传统的XML配置文件,使得代码更加简洁、易读。在Spring 3.0及以上版本中,Annotation配置得到了广泛的应用。 首先,...
1. **依赖注入(Dependency Injection, DI)**:Spring Annotation中最常用的注解之一是`@Autowired`,它实现了自动装配bean。当在类的字段或构造器上使用`@Autowired`时,Spring会自动寻找类型匹配的bean并注入。...
在Java Web开发中,Spring和MyBatis是两个非常重要的框架。Spring是一个全面的后端开发框架,提供了依赖注入、AOP(面向切面编程)、事务管理等功能;而MyBatis则是一个轻量级的持久层框架,它将SQL与Java代码分离,...
Spring框架是Java开发中不可或缺的一部分,它通过提供丰富的注解简化了依赖注入、配置管理和AOP(面向切面编程)等任务。本文将深入探讨Spring注解及其在实际开发中的应用。 1. **依赖注入(Dependency Injection, ...
在`IOC_Project`这个压缩包文件中,很可能是包含了一个示例项目,用于演示如何使用Spring的IOC Annotation注入。通过查看和运行这个项目,你可以更深入地了解这些概念并实践它们。项目的结构可能包括了源代码文件(`...
在多数据源配置中,spring 的 Annotation-Driven 配置事务管理器可以帮助我们轻松地管理多个数据源的事务。 在 Spring 框架中,事务管理器是通过 `<tx:annotation-driven>` 元素来配置的。在多数据源配置中,我们...
Spring Annotation 注解 Spring 框架中的注解是用于在 Java 类中添加元数据的,通过这些元数据,Spring 框架可以在运行时提供更多的功能。 Spring 框架提供了多种类型的注解,例如 @Autowired、@Resource、@...
在Spring XML配置文件中,需要定义`<tx:annotation-driven>`元素,或者在Java配置类中添加`@EnableTransactionManagement`注解。 在实际应用中,需要注意事务的边界和异常处理。例如,当一个方法抛出未检查异常...
Struts2、Hibernate3和Spring2.5是Java Web开发中的三大框架,它们各自负责不同的职责,但可以协同工作以构建高效的企业级应用。这里主要讨论的是如何将这三者结合,并利用注解(Annotation)进行配置,以简化开发...
技术分享:详解Spring基于Annotation的依赖注入实现
在IT行业中,Spring框架是Java开发中的核心工具之一,它为开发者提供了许多强大的功能,包括依赖注入、面向切面编程(AOP)等。本文将深入探讨如何利用Spring的注解式AOP和反射机制来实现日志记录,以便更好地理解和...
在IT行业中,SpringMVC、Spring和MyBatis是三个非常重要的Java开发框架,它们各自在Web应用的各个层面上发挥着关键作用。本项目是一个整合了这三个框架的基于Annotation和Maven的项目,旨在提供一种高效、灵活的开发...
在Spring框架中,注解(Annotation)自动匹配注入IoC(Inversion of Control,控制反转)是一种关键特性,它极大地简化了Java应用的配置管理。本文将深入探讨这一主题,帮助开发者更好地理解和利用这一功能。 首先...
### 详解Spring 3.0基于Annotation的依赖注入实现 #### 概述 Spring框架作为一个广泛使用的Java开发框架,提供了强大的依赖注入(Dependency Injection, DI)能力,帮助开发者轻松管理和组织复杂的Java应用。随着...