zoukankan      html  css  js  c++  java
  • Spring课程 Spring入门篇 3-4 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配置文件红色部分

    实体类:

    package com.imooc.autowiring;
    
    public class AutoWiringDaoImpl implements AutoWiringDao{
    
        @Override
        public void say(String word) {
            // TODO Auto-generated method stub
            System.out.println("请你说话:"+word);
            
        }
    
    }

    接口(与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();
            }
        
        }
        
        
        
        
    }
  • 相关阅读:
    Java技术路线--2循环
    Java技术路线--1基本类型与包装类
    Linux内存管理之UMA模型和NUMA模型
    最长XX子串/数组/子序列
    epoll LT 模式和 ET 模式详解
    OS篇:OS中进程的阻塞与挂起的区别
    约瑟夫环问题
    最大公约数和最小公倍数
    C++之寻找素数(素数筛)
    Linux OOM机制分析
  • 原文地址:https://www.cnblogs.com/1446358788-qq/p/10459594.html
Copyright © 2011-2022 走看看