Bean自动装配

Bean自动装配的方式:

  1. byName:根据名称自动装配 ,检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配
  2. byType:根据类型自动装配, 检查容器中一个与指定属性类型相同的bean,那就将其与该属性自动装配,如果存在多个 Spring将无法判断哪个Bean最合适该属性,抛出异常,如果没有找到,则什么事也没发生。
  3.  constructor:根据构造器自动装配  与byType相似,如果容器中没有找到与构造器参数类型一致的bean,那么抛出异常。不推荐使用

一,byName自动装配

bean.xml  配置autowire="byName" 即可

<?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-3.0.xsd">

    <bean id="textId" class="Automatically.ByName.Text" autowire="byName"></bean>
    <!--
        注意按名字注入,id名称需与属性名名称相同
     -->
    <bean id="speak" class="Automatically.ByName.Speak"></bean>
</beans>
View Code

TestDao:自动装配,只需写入set方法

public class TextDao {
    private TestService speak;
    public void say(){
        System.out.println("Text  Start");
        speak.say();
    }
    //自动装配,只需写入set方法 配置autowire="byName" 即可
    public void setSpeak(TestService speak) {
        this.speak=speak;
    }
}
View Code

TestService:

public class TestService {
    public void say(){
        System.out.println("Speak----say方法被执行-----");
    }
}
View Code

TestMain :测试类

public class TestMain {

    @Test
    public void Test(){
        ApplicationContext context=new ClassPathXmlApplicationContext("Bean.xml");
        TextDao textDao = (TextDao) context.getBean("textId");
        textDao.say();
    }
}
View Code

运行结果:

 

二、byType自动装配

bean.xml   与byName相似 只需修改autowire="byName"autowire="byType"

TestDao  与byName一样

TestService 与byName一样

TestMain  与byName一样

运行结果:

 

 

 

 三、constructor 自动装配

bean.xml 与byName相似 只需修改autowire="byName"autowire="constructor"

<?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-3.0.xsd">
     <!--
        这种模式与 byType 非常相似,但它应用于构造器参数。Spring 容器看作 beans,
    在 XML 配置文件中 beans 的 autowire 属性设置为 constructor。然后,
    它尝试把它的构造函数的参数与配置文件中 beans 名称中的一个进行匹配和连线。
    如果找到匹配项,它会注入这些 bean,否则,它会抛出异常
    -->
    <bean id="textId" class="Automatically.AutoConstructor.TestDao" autowire="constructor">
    </bean>

    <bean id="testService" class="Automatically.AutoConstructor.TestService"></bean>
</beans>
View Code

TestDao : 与上两个不一样的是没有set方法只有构造方法

public class TestDao {
    private TestService speak;
    public TestDao(TestService speak){
        this.speak = speak;
    }
    public void say(){
        System.out.println("TestDao Start:");
        speak.say();
    }
}
View Code

TestService 与byName一样

TestMain  与byName一样

运行结果:

posted @ 2019-12-25 16:55  Cool_Yang  阅读(214)  评论(0编辑  收藏  举报