鍍金池/ 教程/ Java/ Spring使用@Autowired注解自動裝配
Spring EL hello world實例
Spring使用@Autowired注解自動裝配
MapFactoryBean實例
Bean InitializingBean和DisposableBean實例
Spring使用@Required注解依賴檢查
安裝Spring工具套件到Eclipse
CGLIB is required to process @Configuration classes
Spring EL Arrays, Lists, Maps實例
Spring由類型(Type)自動裝配
Spring在bean配置文件中定義電子郵件模板
Spring發(fā)送帶附件郵件
ListFactoryBean實例
Struts 2 + Spring + Hibernate集成實例
Spring bean引用實例
Spring JdbcTemplate batchUpdate()實例
Spring SetFactoryBean實例
Spring通過setter方法注入
Spring EL hello world實例
在bean配置文件中的電子郵件模板
Spring發(fā)送帶附件的Email
Spring EL 方法調(diào)用實例
Spring自動裝配Beans
Spring由構(gòu)造方法自動裝配
Spring使用@Required注解依賴檢查
Spring SimpleJdbcTemplate查詢示例
自定義@Required-style注解
Spring+JDBC實例
Spring EL三元運算(if-then-else)實例
JdbcTemplate+JdbcDaoSupport實例
Spring自動掃描組件
Spring EL方法調(diào)用實例
Spring自動裝配Beans
Spring EL bean引用實例
Spring依賴注入(DI)
Spring EL Lists,Maps實例
Spring通過構(gòu)造方法依賴注入
通過MailSender發(fā)送電子郵件
Spring AOP實例(Pointcut, Advisor)
Spring EL運算符實例
Spring JavaConfig實例
Spring依賴注入 (DI)
Spring EL bean引用實例
Spring由AutoDetect自動裝配
Spring由構(gòu)造方法自動裝配
Spring JdbcTemplate查詢實例
Spring SimpleJdbcTemplate batchUpdate()實例
Spring+JDBC實例
如何注入值到Spring bean屬性
Spring SimpleJdbcTemplate類命名參數(shù)實例
Spring PropertyPlaceholderConfigurer實例
Spring JdbcTemplate batchUpdate() 實例
Spring EL與ExpressionParser測試
Spring內(nèi)部Bean實例
加載多個Spring bean配置文件
Spring+Hibernate+MySql實例(注解)
Spring AOP+AspectJ 在XML配置實例
Spring自動代理創(chuàng)建者實例
Spring EL正則表達式實例
測試 Spring EL與ExpressionParser
java.lang.ClassNotFoundException: org.exolab.castor.xml.XMLExcep
Spring PropertyPlaceholderConfigurer實例
Spring bean配置繼承
Spring使用Setter依賴注入
Spring自動裝配@Qualifier實例
Spring依賴檢查
Spring hello world實例
Spring依賴注入servlet會話監(jiān)聽器
Spring自定義@Required-style注解
Spring bean作用域
Spring AOP攔截器的序列
注入值到Spring Bean的屬性
Spring JdbcTemplate+JdbcDaoSupport實例
Spring教程
Spring自動裝配@Qualifier實例
Spring MapFactoryBean例子
Spring Bean作用域?qū)嵗?/span>
Cannot proxy target class because CGLIB2 is not available
Spring AOP攔截器的順序
Spring集合(List, Set, Map, and Properties)實例
Spring SimpleJdbcTemplate類命名參數(shù)實例
Spring通過自動檢測自動裝配
Spring+Hibernate+MySql實例
Spring JavaConfig @Import實例
訪問MessageSource的bean(MessageSourceAware)
Spring JdbcTemplate查詢實例
Spring JavaConfig @Import實例
Spring Object/XML映射實例
Spring Bean引用例子
Spring AOP+AspectJ注解實例
java.lang.ClassNotFoundException: org.apache.xml.serialize.XMLSe
Spring依賴檢查
Spring JavaConfig實例
Spring AOP+AspectJ注解實例
Spring bean配置繼承
Spring自動掃描組件
自動代理創(chuàng)建者實例
Spring Bean init-method 和 destroy-method實例
Spring通過構(gòu)造方法注入
Spring過濾器組件自動掃描
Spring構(gòu)造方法注入類型歧義
Spring+JDBC實例
Spring EL正則表達式實例
Spring通過Gmail SMTP服務(wù)器MailSender發(fā)送電子郵件
Spring AOP+AspectJ在XML配置實例
SetFactoryBean實例
Spring注入日期到bean屬性-CustomDateEditor
Spring AOP通知實例 – Advice
Spring使用@Autowired注解自動裝配
Spring AOP實例(Pointcut,Advisor)
Spring AOP在Hibernate的事務(wù)管理
Spring初學快速入門
Spring內(nèi)部bean實例
Spring bean加載多個配置文件
Spring + Hibernate+ MySql注解實例
Spring @PostConstruct和@PreDestroy實例
Spring依賴注入servlet會話監(jiān)聽器
Spring ListFactoryBean實例
Spring松耦合的實例
Spring過濾器組件自動掃描
Spring按名稱(Name)自動裝配
Spring AOP通知實例(Advice)
Spring AOP在Hibernate事務(wù)管理
Bean init-method和destroy-method實例
Spring EL操作符實例
Spring注入日期到bean屬性(CustomDateEditor)
資源加載程序的getResource()示例
Bean @PostConstruct和@PreDestroy實例
Struts2+Spring集成實例
Spring集合 (List,Set,Map,Properties) 實例
Spring按類型(Type)自動裝配
Spring由名稱(Name)自動裝配
Spring SimpleJdbcTemplate batchUpdate()實例
Spring hello world實例
Spring Bean InitializingBean和DisposableBean實例
Spring構(gòu)造方法注入類型歧義
Spring EL三元操作符(if-then-else)實例
Spring+Hibernate+MySql實例
Spring松耦合實例

Spring使用@Autowired注解自動裝配

在上一篇 Spring在XML自動裝配 示例中,它會匹配當前Spring容器任何bean的屬性自動裝配。在大多數(shù)情況下,你可能只需要在特定的 bean 自動裝配屬性。
在Spring中,可以使用 @Autowired 注解通過setter方法,構(gòu)造函數(shù)或字段自動裝配Bean。此外,它可以在一個特定的bean屬性自動裝配。

注 @Autowired注解是通過匹配數(shù)據(jù)類型自動裝配Bean。

請參見下面的完整的例子來演示如何使用@Autowired。

1. Beans

一個 Customer bean 在bean配置文件中聲明。稍后,您將使用 “@Autowired” 來自動裝配一個Person bean。
package com.yiibai.common;

public class Customer 
{
	//you want autowired this field.
	private Person person;
	
	private int type;
	private String action;
	
	//getter and setter method
	
}
<beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

	<bean id="CustomerBean" class="com.yiibai.common.Customer">
		<property name="action" value="buy" />
		<property name="type" value="1" />
	</bean>

	<bean id="PersonBean" class="com.yiibai.common.Person">
		<property name="name" value="yiibai" />
		<property name="address" value="address 123" />
		<property name="age" value="28" />
	</bean>
	
</beans>

2. 注冊AutowiredAnnotationBeanPostProcessor

要啟用@Autowired,必須注冊“AutowiredAnnotationBeanPostProcessor',你可以用兩種方式做到這一點:

1. Include <context:annotation-config />

添加 Spring 上下文和<context:annotation-config />在bean配置文件中。
<beans 
	//...
	xmlns:context="http://www.springframework.org/schema/context"
	//...
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-2.5.xsd">
	//...

	<context:annotation-config />
	//...
</beans>

下面是完整的實例

<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-2.5.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-2.5.xsd">

	<context:annotation-config />

	<bean id="CustomerBean" class="com.yiibai.common.Customer">
		<property name="action" value="buy" />
		<property name="type" value="1" />
	</bean>

	<bean id="PersonBean" class="com.yiibai.common.Person">
		<property name="name" value="yiibai" />
		<property name="address" value="address ABC" />
		<property name="age" value="29" />
	</bean>
	
</beans>

2.  包含 AutowiredAnnotationBeanPostProcessor

直接在bean配置文件包含“AutowiredAnnotationBeanPostProcessor”。
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean 
class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>
	
	<bean id="CustomerBean" class="com.yiibai.common.Customer">
		<property name="action" value="buy" />
		<property name="type" value="1" />
	</bean>

	<bean id="PersonBean" class="com.yiibai.common.Person">
		<property name="name" value="yiibai" />
		<property name="address" value="address ABC" />
		<property name="age" value="29" />
	</bean>
	
</beans>

3. @Autowired示例

現(xiàn)在,你可以通過 @Autowired 自動裝配 bean,它可以在 setter 方法,構(gòu)造函數(shù)或字段中使用。
1. @Autowired setter 方法
package com.yiibai.common;

import org.springframework.beans.factory.annotation.Autowired;

public class Customer 
{
	private Person person;
	private int type;
	private String action;
	//getter and setter methods
	
	@Autowired
	public void setPerson(Person person) {
		this.person = person;
	}
}
2. @Autowired 構(gòu)造方法
package com.yiibai.common;

import org.springframework.beans.factory.annotation.Autowired;

public class Customer 
{
	private Person person;
	private int type;
	private String action;
	//getter and setter methods
	
	@Autowired
	public Customer(Person person) {
		this.person = person;
	}
}
3. @Autowired 字段
package com.yiibai.common;

import org.springframework.beans.factory.annotation.Autowired;

public class Customer 
{
	@Autowired
	private Person person;
	private int type;
	private String action;
	//getter and setter methods
}
上面的例子會自動裝配“PersonBean”到Customer的person屬性。

執(zhí)行它

package com.yiibai.common;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App 
{
    public static void main( String[] args )
    {
    	ApplicationContext context = 
    	  new ClassPathXmlApplicationContext(new String[] {"applicationContext.xml"});
    	
    	Customer cust = (Customer)context.getBean("CustomerBean");
    	System.out.println(cust);
    	
    }
}

輸出

Customer [person=Person [name=YiibaiA], type=1, action=buy]

依賴檢查

默認情況下,@Autowired將執(zhí)行相關(guān)檢查,以確保屬性已經(jīng)裝配正常。當Spring無法找到匹配的Bean裝配,它會拋出異常。要解決這個問題,可以通過 @Autowired 的“required”屬性設(shè)置為false來禁用此檢查功能。

package com.yiibai.common;

import org.springframework.beans.factory.annotation.Autowired;

public class Customer 
{
	@Autowired(required=false)
	private Person person;
	private int type;
	private String action;
	//getter and setter methods
}
在上面的例子中,如果Spring不能找到一個匹配的Bean,person屬性將不設(shè)定。

@Qualifier

@Qualifier注解我們用來控制bean應(yīng)在字段上自動裝配。例如,具有兩個類似的 person bean 配置文件。
<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-2.5.xsd
	http://www.springframework.org/schema/context
	http://www.springframework.org/schema/context/spring-context-2.5.xsd">

	<context:annotation-config />

	<bean id="CustomerBean" class="com.yiibai.common.Customer">
		<property name="action" value="buy" />
		<property name="type" value="1" />
	</bean>

	<bean id="PersonBean1" class="com.yiibai.common.Person">
		<property name="name" value="yiibai-1" />
		<property name="address" value="address-1" />
		<property name="age" value="29" />
	</bean>
	
	<bean id="PersonBean2" class="com.yiibai.common.Person">
		<property name="name" value="yiibai-2" />
		<property name="address" value="address-2" />
		<property name="age" value="28" />
	</bean>
	
</beans>
Spring知道哪個 bean 應(yīng)當裝配?
為了解決這個問題,可以使用 @Qualifier 自動裝配一個特定的 bean,例如,
package com.yiibai.common;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;

public class Customer 
{
	@Autowired
	@Qualifier("PersonBean1")
	private Person person;
	private int type;
	private String action;
	//getter and setter methods
} 

這意味著,“PersonBean1” bean被自動裝配到customer的person屬性。閱讀下面完整的例子 – Spring自動裝配@Qualifier實例

總結(jié)

這@Autowired注解非常靈活,功能強大,絕對比bean配置文件的“autowire”屬性要更好。


下載代碼 –  http://pan.baidu.com/s/1o7oNBTo