zoukankan      html  css  js  c++  java
  • 依赖注入--setting注入和构造器注入

      本文介绍依赖注入的两种方式:setting注入和构造器注入

      这里通过一个简单的例子来讲解依赖注入的两种方式,我们先创造一个Stage类,有了Stage就需要Performer,所以我们将

    Performer注入到Stage。

      构造器注入和Setting注入

      创造两个类Stage和Performer:

    public class Performer {
        public void show() {
            System.out.println("表演ing...");
        }
    }
    
    
    
    public class Stage {
        private Performer performer;
    

       /* public void setPerformer(Performer performer) {
          this.performer = performer;
        }*/

      public Stage(Performer performer) {
            this.performer = performer;
        }
    
        public void start() {
            performer.show();
        }
    }

      编写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"
           xmlns:aop="http://www.springframework.org/schema/aop"
           xmlns:tx="http://www.springframework.org/schema/tx"
           xmlns:context="http://www.springframework.org/schema/context"
           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/tx http://www.springframework.org/schema/tx/spring-tx.xsd
              http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
        <bean id="performer" class="Performer" />  
         <bean id="stage" class="Stage" >
    <!--     使用constructor-arg则为构造器注入 -->
               <constructor-arg ref="performer"></constructor-arg>
        <!--     使用property则为setting注入
    <property name="performer" ref="performer"></property> -->
          </bean>
    </beans>    

      调用Stage的start方法

    public class MyFirstTest {
        @Test
        public void testBean() {
            ApplicationContext ac = new ClassPathXmlApplicationContext("spring-config.xml");
            Stage stage = (Stage) ac.getBean("stage",Stage.class);
            stage.start();
        }
    }

      构造器注入和setting注入都能得到bean只是xml配置的方式不一样,当然注入也可以注入普通值,方法和上述一样。

      有的人可能不喜欢xml配置文件,spring提供了注解的方式同样可以实现注入。

      

      注解方式注入@Autowired和@Qualifier

      在讲解注解注入时,需要了解spring自动注入的四种方式(xml配置文件中bean的autowire属性)

    • byName:把与Bean的属性具有相同名字(或者ID)的其他Bean自动装配到Bean的对应属性中,如果没有,则该属性不进行装配
    • byType:把与Bean的属性具有相同类型的其他Bean自动装配到Bean对应属性中,如果没有,则该属性不进行装配
    • constructor:把与Bean的构造器入参具有相同类型的其他Bean自动装配到Bean构造器的对应入参中
    • autodetect:首先尝试使用constructor进行自动装配,如果失败,再尝试使用byType
  • 相关阅读:
    《将博客搬至CSDN》
    2015-05-01 至 2015-07-30错误总结
    2015-01-01至2015-04-30错误积累
    2015-07-30 至 2016-03-16错误Note
    2014-11-21错误总结
    Spring 和 SpringMVC 的区别
    spring 容器加载
    Spring注解
    自定义拦截器
    Js闭包
  • 原文地址:https://www.cnblogs.com/gongdi/p/4956661.html
Copyright © 2011-2022 走看看