您的位置:首页 > 编程语言 > Java开发

Spring@Autowired注解与自动装配

2016-01-28 00:00 836 查看
摘要: Spring@Autowired注解与自动装配

@Autowired可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作,这里必须明确:@Autowired是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier使用;

@Autowired可以对成员变量进行标注

package com.baobaotao;

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

public class Boss {

@Autowired

private Car car;

@Autowired

private Office office;



}

在applicationContext.xml中 把原来引用的<property >标签也去掉。

<?xml version="1.0" encoding="UTF-8" ?>

<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">
<!-- 该 BeanPostProcessor 将自动起作用,对标注 @Autowired 的 Bean 进行自动注入 -->

<bean class="org.springframework.beans.factory.annotation.

AutowiredAnnotationBeanPostProcessor"/>

<!-- 移除 boss Bean 的属性注入配置的信息 -->

<bean id="boss" class="com.baobaotao.Boss"/>

<bean id="office" class="com.baobaotao.Office">

<property name="officeNo" value="001"/>

</bean>

<bean id="car" class="com.baobaotao.Car" scope="singleton">

<property name="brand" value=" 红旗 CA72"/>

<property name="price" value="2000"/>

</bean>

</beans>

这样,当 Spring 容器启动时,AutowiredAnnotationBeanPostProcessor 将扫描 Spring 容器中所有 Bean,当发现 Bean 中拥有 @Autowired 注释时就找到和其匹配(默认按类型匹配)的 Bean,并注入到对应的地方中去。
  
   按照上面的配置,Spring 将直接采用 Java 反射机制对 Boss 中的 car 和 office 这两个私有成员变量进行自动注入。所以对成员变量使用 @Autowired 后,您大可将它们的 setter 方法(setCar() 和 setOffice())从 Boss 中删除。

@Autowired可以对方法或构造函数进行标注

package com.baobaotao;

public class Boss {

private Car car;

private Office office;

@Autowired

public void setCar(Car car) {

this.car = car;

}

@Autowired

public void setOffice(Office office) {

this.office = office;

}



}

这时,@Autowired 将查找被标注的方法的入参类型的 Bean,并调用方法自动注入这些 Bean。而下面的使用方法则对构造函数进行标注:

[java] view plaincopyprint?

package com.baobaotao;

public class Boss {

private Car car;

private Office office;

@Autowired

public Boss(Car car ,Office office){

this.car = car;

this.office = office ;

}



}

由于 Boss() 构造函数有两个入参,分别是 car 和 office,@Autowired 将分别寻找和它们类型匹配的 Bean,将它们作为 Boss(Car car ,Office office) 的入参来创建 Boss Bean。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息