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 + "]";
    }
}

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 + "]";
    }
}

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 + "]";
    }
}

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) {

        }
    }
}

<?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>

原文地址:https://www.cnblogs.com/fengfuwanliu/p/10992645.html

时间: 2024-11-07 16:28:56

Spring探究-----自动装配Bean详解的相关文章

Spring自动装配Bean详解

1.      Auto-Wiring 'no' 2.      Auto-Wiring 'byName' 3.      Auto-Wiring 'byType 4.      Auto-Wiring 'constructor' 5.      Auto-Wiring 'autodetect' Spring Auto-Wiring Beans--Spring自动装配Bean 所谓自动装配,就是将一个Bean注入到其他Bean的Property中,类似于以下: <bean id="cust

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

Spring之自动装配bean

Spring之自动装配bean 最近学习Spring框架,参考资料是Spring IN ACTION----第一张内容飘过去~~ 从第二章的自动装配bean开始,不过学习Spring核心最重要的还是ioc的注入模式吧! 书上是这么说的----(概念问题,哈哈),首先普及几个概念 --------------------------------------------------------------------------------------------------------------

spring中自动装配bean

首先用@Component注解类: package soundsystem: import org.springframework.stereotype.Component; @Component public class TestBean{ …… } 开启组件扫描spring才能自动装配bean,创建一个@ComponentScan注解的类 package soundsystem: import org.springframework.context.annotation.componentS

3.spring:自动装配/Bean之间的关系/作用域/外部文件/spel/

1.自动装配/手动装配 xml配置文件里的bean自动装配 Spring IOC 容器里可以自动的装配Bean,需要做的仅仅是在<bean>的autowire属性里面指定自动装配模式 ->byType(根据类型自动进行装配):若IOC容器里需要有多个与目标Bean类型一样的Bean,在这种情况子下,Spring无法判定那个Bean合适,所以不能执行自动装配 ->byName(根据名称自动装配):必须将目标Bean的名称和属性名设置完全相同, ->constuuctor(通过是

(转)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详解

Bean详解 Spring框架的本质其实是:通过XML配置来驱动Java代码,这样就可以把原本由java代码管理的耦合关系,提取到XML配置文件中管理.这样就实现了系统中各组件的解耦,有利于后期的升级和维护.1.Bean的基本定义和Bean别名<beans>元素是Spring配置文件的根元素,该元素可以指定如下属性:default-lazy-init:指定<beans>元素下配置的所有bean默认的延迟初始化行为default-merge:指定<beans>元素下配置的

spring自动装配Bean属性

spring提供了3种类型的自动装配 byName:把与Bean的属性具有相同名字(或者ID)的其他Bean自动装配到Bean的对应属性中. byType:把与Bean的属性具有相同类型的其他Bean自动装配到Bean的对应属性中. constructor:把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean的对应属性中. byName自动装配 <bean id="roles" class="cn.com.ztz.spring.model.Roles&q

Spring 自动装配 Bean

Spring3系列8- Spring 自动装配 Bean 1.      Auto-Wiring ‘no’ 2.      Auto-Wiring ‘byName’ 3.      Auto-Wiring ‘byType 4.      Auto-Wiring ‘constructor’ 5.      Auto-Wiring ‘autodetect’ Spring Auto-Wiring Beans——Spring自动装配Bean 所谓自动装配,就是将一个Bean注入到其他Bean的Prope