Spring探究-----自动装配Bean详解

Posted fengfuwanliu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring探究-----自动装配Bean详解相关的知识,希望对你有一定的参考价值。

   1.xml配置文件(了解)

1.1 byName 按名称自动装配(推荐,需要get和set方法)

      根据类型进行自动装配. 但要求 IOC 容器中只有一个类型对应的 bean, 若有多个则无法完成自动装配

    <bean id="student" class="com.spring.autowire.Student" autowire="byName">
        <property name="stuName" value="小魔仙"></property>
    </bean>

    <bean id="address" class="com.spring.autowire.Address">
        <property name="addressInfo" value="一中"></property>
    </bean>

1.2 btType 按类型自动装配

      若属性名和某一个 bean 的 id 名一致, 即可完成自动装配. 若没有 id 一致的, 则无法完成自动装配 

<bean id="student" class="com.spring.autowire.Student" autowire="byType">
        <property name="stuName" value="小魔仙"></property>
    </bean>

    <bean id="address" class="com.spring.autowire.Address">
        <property name="addressInfo" value="一中"></property>
    </bean>

1.3 全局autowire

<?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:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd" default-autowire="byName">

</beans>

   2.注解装配(熟悉)

2.1 @Autowired

     @Autowired是按类型自动转配的

@Autowired
private School school;
<bean id="school" class="com.spring.autowire.School">
       <property name="schoolName" value="一中"></property>
</bean>

2.2 @Qualifier

     @Autowired是根据类型自动装配的,加上@Qualifier则可以根据byName的方式自动装配,其中@Qualifier不能单独使用

@Autowired
@Qualifier("schoolName")
private School school;
<bean id="schoolName" class="com.spring.autowire.School">
     <property name="schoolName" value="一中"></property>
</bean>

2.3 @Resource

     @Resource如有指定的name属性,先按该属性进行byName方式查找装配;其次再进行默认的byName方式进行装配;如果以上都不成功,则按byType的方式自动装配。都不成功,则报异常

@Resource
private School school;
<bean id="school" class="com.spring.autowire.School">
     <property name="schoolName" value="一中"></property>
</bean>

或者

@Resource(name="schoolName")
private School school;
<bean id="schoolName" class="com.spring.autowire.School">
    <property name="schoolName" value="一中"></property>
</bean>

     完整Demo

技术图片
package com.spring.autowire;

import javax.annotation.Resource;

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

/**
 * 学生类
 * 
 * @author yyx 2019年6月9日
 */
public class Student 
    /**
     * 学生姓名
     */
    private String stuName;
    /**
     * 学校信息
     */
    @Autowired
    private School school;
    /**
     * 地址信息
     */
    private Address address;

    public String getStuName() 
        return stuName;
    

    public void setStuName(String stuName) 
        this.stuName = stuName;
        

    public Address getAddress() 
        return address;
    

    public void setAddress(Address address) 
        this.address = address;
    

    @Override
    public String toString() 
        return "Student [stuName=" + stuName + ", school=" + school + ", address=" + address + "]";
    
View Code

 

技术图片
package com.spring.autowire;

/**
 * 地址类
 * 
 * @author yyx 2019年6月9日
 */
public class Address 
    /**
     * 地址信息
     */
    private String addressInfo;

    public String getAddressInfo() 
        return addressInfo;
    

    public void setAddressInfo(String addressInfo) 
        this.addressInfo = addressInfo;
    

    @Override
    public String toString() 
        return "Address [addressInfo=" + addressInfo + "]";
            
View Code

 

技术图片
package com.spring.autowire;

/**
 * 学校类
 * 
 * @author yyx 2019年6月9日
 */
public class School 
    /**
     * 学校名称
     */
    private String schoolName;

    public String getSchoolName() 
        return schoolName;
    

    public void setSchoolName(String schoolName) 
        this.schoolName = schoolName;
    

    @Override
    public String toString() 
        return "School [schoolName=" + schoolName + "]";
            
View Code

 

技术图片
package com.spring.autowire;

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

/**
 * 测试自动装配
 * 
 * @author yyx 2019年6月9日
 */
public class AutowireMain 
    public static void main(String[] args) 
        ApplicationContext aContext = null;
        try 
            aContext = new ClassPathXmlApplicationContext("applicationContext.xml");
            Student student = (Student) aContext.getBean("student");
            System.out.println(student);
         catch (Exception e) 

        
    
View Code

 

技术图片
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/aop 
    http://www.springframework.org/schema/aop/spring-aop.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd
    ">
    
    <context:component-scan base-package="com.spring.autowire" resource-pattern="com.spring.autowire.Student"></context:component-scan>
    
    <!-- byType: 根据类型进行自动装配. 但要求 IOC 容器中只有一个类型对应的 bean, 若有多个则无法完成自动装配. byName: 
        若属性名和某一个 bean 的 id 名一致, 即可完成自动装配. 若没有 id 一致的, 则无法完成自动装配 -->
    <bean id="student" class="com.spring.autowire.Student" autowire="byName">
        <property name="stuName" value="小魔仙"></property>
    </bean>

    <bean id="address" class="com.spring.autowire.Address">
        <property name="addressInfo" value="湖口"></property>
    </bean>
    
    <bean id="school" class="com.spring.autowire.School">
       <property name="schoolName" value="一中"></property>
    </bean>
</beans>
View Code

 

以上是关于Spring探究-----自动装配Bean详解的主要内容,如果未能解决你的问题,请参考以下文章

Spring:玩转bean的作用域和自动装配!

Spring自动装配Bean详解

Spring学习bean装配详解之 XML方式配置

Spring学习bean装配详解之 通过注解装配 Bean基础配置方式

Spring Bean装配详解

Spring Boot源码:Bean装配