Spring课程 Spring入门篇 3-3 Spring bean装配(上)之自动装配

1    自动装配的方式

2    自动装配实现

1    自动装配的方式

根据反射的机制

1.1  byName根据属性名自动装配,类似于依赖注入的set注入。(如果找不到set属性中的bean,如果test中用try方法的话,报空指针异常)

1.2  byType根据类名进行注入,xml配置文件beanId可以不用写

1.3  constructor应用于构造器参数。(找不到构造器参数一致的bean,抛异常)

2    自动装配实现

2.1  自动装配byName:

该方式实现方式与set注入类似,唯一不同之处见xml配置文件红色部分

实体类(与set注入相同):

package com.imooc.autowiring;

public class AutoWiringService {
    
    private AutoWiringDao autoWiringDao;

    
    public void setAutoWiringDao(AutoWiringDao autoWiringDao) {
        this.autoWiringDao = autoWiringDao;
    }


    public void sayHello(String word){
        autoWiringDao.say(word);
    }

}

xml配置文件:

<?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.xsd"
default-autowire="byName">

<bean id="autoWiringService" class="com.imooc.autowiring.AutoWiringService">
<!--     <property name="autoWiringDao" ref="autoWiringDao"></property>     -->
</bean> 
<bean id="autoWiringDao" class="com.imooc.autowiring.AutoWiringDaoImpl"></bean> 



</beans>

测试文件:

package com.imooc.autowiring;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;

import com.imooc.test.base.UnitTestBase;

@RunWith(BlockJUnit4ClassRunner.class)
public class TestAutoWiring extends UnitTestBase{

    public TestAutoWiring() {
        super("classpath:spring-autowiring.xml");
        // TODO Auto-generated constructor stub
    }
    
    
    @Test
    public void testAutoWiring(){
        try {
            AutoWiringService aws = super.getbean("autoWiringService");
            aws.sayHello("老婆好!");
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    
    }
    
    
    
    
}

打印结果

三月 02, 2019 6:51:24 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@652c4193: startup date [Sat Mar 02 06:51:24 CST 2019]; root of context hierarchy
三月 02, 2019 6:51:24 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring-autowiring.xml]
请你说话:老婆好!
三月 02, 2019 6:51:25 上午 org.springframework.context.support.ClassPathXmlApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@652c4193: startup date [Sat Mar 02 06:51:24 CST 2019]; root of context hierarchy

2.2  自动装配byType(其他文件与byName完全一致,只有xml配置文件不同)

xml配置文件:

<?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.xsd"
default-autowire="byType">

<bean id="autoWiringService" class="com.imooc.autowiring.AutoWiringService">
</bean> 
<bean id="autoWiringDao111" class="com.imooc.autowiring.AutoWiringDaoImpl"></bean> 



</beans>

打印结果

三月 02, 2019 6:51:24 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@652c4193: startup date [Sat Mar 02 06:51:24 CST 2019]; root of context hierarchy
三月 02, 2019 6:51:24 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [spring-autowiring.xml]
请你说话:老婆好!
三月 02, 2019 6:51:25 上午 org.springframework.context.support.ClassPathXmlApplicationContext doClose 信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@652c4193: startup date [Sat Mar 02 06:51:24 CST 2019]; root of context hierarchy

2.3  constructor(类似于构造依赖注入法)

实体类:

package com.imooc.autowiring;

public class AutoWiringService {
    
    private AutoWiringDao autoWiringDao;

//    public void setAutoWiringDao(AutoWiringDao autoWiringDao) {
//        this.autoWiringDao = autoWiringDao;
//    }
    
    public AutoWiringService(AutoWiringDao autoWiringDao) {
        this.autoWiringDao = autoWiringDao;
    }
    


    public void sayHello(String word){
        autoWiringDao.say(word);
    }




    public AutoWiringService() {
        super();
        // TODO Auto-generated constructor stub
    }

}

xml配置文件:

<?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.xsd"
default-autowire="constructor">

<bean id="autoWiringService" class="com.imooc.autowiring.AutoWiringService">
</bean> 
<bean id="autoWiringDao111" class="com.imooc.autowiring.AutoWiringDaoImpl"></bean> 



</beans>

测试类:

package com.imooc.autowiring;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;

import com.imooc.test.base.UnitTestBase;

@RunWith(BlockJUnit4ClassRunner.class)
public class TestAutoWiring extends UnitTestBase{

    public TestAutoWiring() {
        super("classpath:spring-autowiring.xml");
        // TODO Auto-generated constructor stub
    }
    
    
    @Test
    public void testAutoWiring(){
        try {
            AutoWiringService aws = super.getbean("autoWiringService");
            aws.sayHello("老婆好!");
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
    
    }
    
    
    
    
}

猜你喜欢

转载自www.cnblogs.com/1446358788-qq/p/10459594.html