Spring@Autowired注解

原创 2016年05月30日 21:36:10

@Autowired注解可以对成员变量、方法和构造函数进行标注,来完成自动装配的工作。
注意:@Autowired默认是按照类型来注入的。
看下面的例子:例子是以对成员变量(field)为例进行的

public class Person {
    private String name;
    private String address;
    private int age;

    public void setName(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;

    }

    public void setAge(int age) {
        this.age = age;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getAddress() {
        return address;
    }

    @Override
    public String toString() {
        return "[name:"+getName()+
                ",address:" + getAddress()+
                ",age:" +getAge()+
                "]";
    }

另外一个Customer类有一个Person类型的成员,现用@Autowired注入:

public class Customer
{
    @Autowired
    private Person person;
    private int type;
    private String action;

    public String getAction() {
        return action;
    }

    public void setAction(String action) {
        this.action = action;
    }

    public int getType() {
        return type;
    }

    public void setType(int type) {
        this.type = type;
    }

    @Override
    public String toString() {
        return "[Type:"+getType()+
                ",action:"+getAction()+
                ","+"person:"+
                person.toString();
    }
}

在配置文件中加入

<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">
    <!--@Autowired-->
    <context:annotation-config/>
    <bean id="CustomerBean" class="com.mkyong.common.Customer">
        <property name="action" value="buy" />
        <property name="type" value="1" />
    </bean>

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

测试程序:

public class Main 
{
    public static void main( String[] args )
    {
        ApplicationContext context = 
          new ClassPathXmlApplicationContext(new String[] {"SpringBeans.xml"});

        Customer customer  = (Customer)context.getBean("CustomerBean");
        System.out.println(customer);
    }
}

@Autowired默认情况下,总是认为field是可以成功注入的,如果没有成功注入(例如没有匹配的类型)则会跑出异常,如果要使得在没有成功注入的情况下不抛出异常,那么可以和required属性一起使用,将required的属性设置为false:

public class Customer 
{
    **@Autowired(required=false)**
    private Person person;
    private int type;
    private String action;
    //getter and setter methods
}

@Autowired默认是按照类型来匹配的,那么当容器中有两个相同类型的bean时怎样区分要注入是哪一个呢?这时候@Qualifier注解便起作用了:

 <bean id="person1" class="com.hzsunpeng.Person">
        <property name="name" value="name1"/>
        <property name="address" value="adderss1"/>
        <property name="age" value="23"/>
    </bean>
    <bean id="person2" class="com.hzsunpeng.Person">
        <property name="name" value="name2"/>
        <property name="address" value="adderss2"/>
        <property name="age" value="22"/>
    </bean>

这时候怎样决定要注入person1呢还是person2呢?

如果想注入person1,那么可以这样做:

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

最后注意一个细节:如果使用了springMVC自动扫描组件(@Component或者是@Service等),在配置文件中加入了

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

那么配置文件中的

<context:annotation-config/>

可以省略。

版权声明:本文为博主原创文章,未经博主允许不得转载。

Spring的 @Autowired注解的详细解释

使用 @Autowired 注解进行装配,只能是根据类型进行匹配。@Autowired 注解可以用于 Setter 方法、构造函数、字段,甚至普通方法,前提是方法必须有至少一个参数。@Autowire...

Spring@Autowired注解与自动装配

1   配置文件的方法   我们编写spring 框架的代码时候。一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量。并且要配套写上 get 和 set方法。...

Spring@Autowired注解与自动装配

转自:http://blog.csdn.net/heyutao007/article/details/5981555

Spring@Autowired注解与自动装配

本文转自:http://blog.csdn.net/oathevil/article/details/6661497

Spring @Autowired注解与自动装配

遇到的问题@Autowired @Qualifier("cipShopOwnerServiceImpl") bean name ShopOwnerService cipShopOwnerServi...

Spring@Autowired注解与自动装配

1   配置文件的方法   我们编写spring 框架的代码时候。一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量。并且要配套写上 get 和 set方法。 ...

Spring@Autowired注解与自动装配

1   配置文件的方法   我们编写spring 框架的代码时候。一直遵循是这样一个规则:所有在spring中注入的bean 都建议定义成私有的域变量。并且要配套写上 get 和 set方...
  • M_0307
  • M_0307
  • 2017年05月22日 09:23
  • 174

Spring@Autowired注解与自动装配

今天在预发布环境配置一个manager的时候,应用启动失败,报错: Caused by: org.springframework.beans.factory.BeanCreationException...

Spring@Autowired注解与自动装配

配置文件的方法      我们编写spring框架的代码时候。一直遵循是这样一个规则:所有在spring中注入的bean都建议定义成私有的域变量。并且要配套写上get和set方法。      Boss...

spring @Autowired注解

1 配置文件的方法我们编写spring框架的代码时候。一直遵循是这样一个规则:所有在spring中注入的bean都建议定义成私有的域变量。并且要配套写上get和set方法。 Boss拥有Office...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring@Autowired注解
举报原因:
原因补充:

(最多只允许输入30个字)