spring实战之使用注解装配

使用注解装配:

从spring2.5开始,Spring启用了使用注解自动装配Bean的属性,使用注解方式自动装配与在XML中使用 autowire 属性自动装配并没有太大区别,但是使用注解方式允许更细粒度的自动装配。

Spring容器默认禁用注解装配。所以,在使用基于注解的自动装配前,需要在Spring配置中启用它,最简单的启用方式是使用spring的context命名空间配置中的 <context:annotation-config>元素,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />
<!-- bean declarations go here -->
</beans>

<context:annotation-config>元素告诉Spring我们打算使用基于注解的自动装配,一旦配置完成,我们就可以对代码添加注解,标识Spring应该为属性,方法和构造器进行自动装配。

Spring3支持几种不同的用于自动装配的注解:

第一种:Spring自带的@Atutowired注解;

第二种:JSR-330的@Inject注解;

第三种:JSR-250的@Resource注解。

1.使用@Atutowired注解

使用@Atutowired注解标注setter方法:

@Autowired
public void setInstrument(Instrument instrument) {
this.instrument = instrument;
}

当Spring发现对setInstrument()方法使用了@Atutowired注解时,Spring会尝试对该方法进行byType自动装配。

@Atutowired注解有趣的地方在于,不仅可以使用它标注setter方法,还可以标注需要自动装配的Bean引用的任意方法:

@Atutowired注解标注普通方法:

@Autowired
public void heresYourInstrument(Instrument instrument) {
this.instrument = instrument;
}

@Atutowired注解标注构造器:

@Autowired
public Instrumentalist(Instrument instrument) {
this.instrument = instrument;
}

当对构造器进行标注时,@Atutowired注解当创建Bean时,即使在Spring XML中没有使用 <constructor-arg>元素配置bean,该构造器也需要进行自动装配。

@Atutowired注解标直接标注属性,并删除setter方法:

@Autowired
private Instrument instrument;

@Atutowired不会受限于private关键字。即使instrument属性是私有的实例变量。

@Atutowired的受限在于如果没有找到匹配的bean,或者存在多个匹配的Bean,庆幸的是这两种场景都有相应的解决办法。

解决没有找到匹配的bean的方式:可选的自动装配

通过设置@Atutowired的required属性为false来配置自动装配是可选的。如下:

@Autowired(required=false)
private Instrument instrument;

在上面代码中,Spring尝试装配instrument属性,但是如果没有找到与之匹配的类型为Instrument的Bean,应用就不会发生任何问题,而instrument属性的值会设置为null。

需要注意的是required虽然可以用于@Atutowired注解所使用的任意的地方,但是当使用构造器装配时,只有一个构造器可以将@Atutowired的required属性设置为true。其他使用@Atutowired注解所标注的构造器只能将required属性设置为false,此外,当使用@Atutowired标注多个构造器时,Spring就会从所有满足装配条件的构造器中选择入参最多的那个构造器。

解决在多个匹配的Bean的方式:限定歧义性的依赖

为了帮助@Atutowired鉴别出哪一个bean才是我们所需要的,可以配合使用Spring的 @Qualifier注解,如下:

@Autowired
@Qualifier("guitar")
private Instrument instrument;

在上面的代码中,即使有其他的bean也可以装配到instrument属性中,但我们可以使用@Qualifier来明确指定名为guitar的Bean。

@Qualifier注解真正的缩小了自动装配挑选候选Bean的范围。还可以通过在Bean上直接使用qualifier来缩小范围,如下所示:

<bean class="com.springinaction.springidol.Guitar">
<qualifier value="stringed" />
</bean>

除了可以在XML中指定qualifier,还可以使用@Qualifier注解来标注Guitar吉他类,如下所示:

@Qualifier("stringed")
public class Guitar implements Instrument {
...
}

创建自定义注解(省略)

2. JSR-330的@Inject注解

3. JSR-250的@Resource注解

时间: 2024-10-19 02:27:48

spring实战之使用注解装配的相关文章

Spring实战笔记2---Bean的装配

创建应用对象之间协作关系的行为通常成为装配,该篇的主要内容有两个,一个Spring装配Bean的几种方式以及Spring表达式,其实这两者是分不开的,在Spring中,对象无需自己负责查找或者创建与其关联的其他对象,相反容器负责把需要相互协作的对象一引用赋予各个对象,目前我们先说声明式的装配,注解式的装配等溜到下篇再详细记录,在声明用的xml配置文件中,可以使用表达式来完成一些简单的逻辑处理,和方法调用或者对象引用,在有些特殊的需求当中非它莫属,首先是装配Bean 声明Bean <bean id

Spring XML配置--使用注解装配(@Atutowired、@Inject、@Resource)

陈科肇--http://blog.csdn.net/u013474104/article/details/44352765 ======= 1.装配术语 创建应用对象之间协作关系的行为通常被称为装配 2.使用注解装配 Spring是从Spring2.5开始引入使用注解自动装配的. Spring容器是默认禁用注解装配的,因此如果要使用Spring的注解装配,你必须启用它.启用方式:使用Spring的context命名空间配置中的<context:annotation-config>元素,配置启用

Spring学习笔记--使用注解装配

使用@Autowired注解 从Spring2.5开始,最有趣的一种装配Spring Bean的方式是使用注解自动装配Bean的属性.Spring默认禁用注解装配,最简单的启用方式是使用Spring的context命名空间配置中的<context:annotation-config>元素,如下所示: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.

(转)java之Spring(IOC)注解装配Bean详解

在这里我们要详细说明一下利用Annotation-注解来装配Bean. 因为如果你学会了注解,你就再也不愿意去手动配置xml文件了,下面就看看Annotation的魅力所在吧. 先来看看之前的bean注解装配例子: package com.eco.service; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import

spring实战第二章小记-装配bean

时间:2020/02/06 一.思想 1.创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入(DI)的本质. 对于上面这句话的个人理解:当我们在new一个对象时如果传入了别的对象作为参数(这个对象可能是引用数据类型也可能是基本数据类型),这时两个对象之间就形成了一种依赖关系,由于这种依赖关系的存在,两个对象之间就是一种强耦合的关系,而通过依赖注入可以降低两个对象之间的耦合度,注意,不是消除,如果两个对象之间没有耦合关系,那两个对象就是完全没有关系的. 2.spring框架提供了三种主要的

Spring实战之通过XML装配bean

尽管Spring长期以来确实与XML有着关联,但现在需要明确的是,XML不再是配置Spring的唯一可选方案.Spring现在有了强大的自动化配置和基于Java的配置,XML不应该再是你的第一选择了.不过,鉴于已经存在那么多基于XML的Spring配置,所以理解如何在Spring中使用XML还是很重要的.但是,我希望本节的内容只是用来帮助你维护已有的XML配置,在完成新的Spring工作时,希望你会使用自动化配置和JavaConfig. 1.1创建XML配置规范 在使用XML为Spring装配b

【Spring实战】—— 8 自动装配

本篇介绍一下自动装配的知识,Spring为了简化配置文件的编写.采用自动装配方式,自动的装载需要的bean. 自动装配 有以下几种方式: 1 byName 通过id的名字与属性的名字进行判断,要保证Bean实例中属性名字与该装配的id名字相同. 2 byType 通过类型确定装配的bean,但是当存在多个类型符合的bean时,会报错. 3 contructor 在构造注入时,使用该装配方式,效果如同byType. 4 autodetect 自动装配,这个测试了,3.0.5版本不可用了,不知道是不

Spring实战笔记4---Spring的自定装配与自动检测

Spring的自动装配与自动检测是为了最小化Spring XML配置,如果我们有很多的Bean要装配到spring 容器中,那么我们的配置文件将会看起来很长很长,让人觉得头晕,适当的使用自动装配与自动检测,将有助于缓解以上提到的问题 *自动装配:(autowiring) 有助于减少甚至消除配置<property>元素和<constructor-arg>元素,让Spring自动识别如何装配Bean的依赖关系. *自动检测:(autodiscovery) 比自动装配更进一步,让Spri

spring在IoC容器中装配Bean详解

1.Spring配置概述 1.1.概述 Spring容器从xml配置.java注解.spring注解中读取bean配置信息,形成bean定义注册表: 根据bean定义注册表实例化bean: 将bean实例放入bean缓存池: 应用程序使用bean. 1.2.基于xml的配置 (1)xml文件概述 xmlns------默认命名空间 xmlns:xsi-------标准命名空间,用于指定自定义命名空间的schema文件 xmlns:xxx="aaaaa"-------自定义命名空间,xx