spring依赖注入(DI)

来源:互联网 发布:jsp和javascript哪个好 编辑:程序博客网 时间:2024/04/27 07:05

Spring是一个开源的控制反转(Inversionof Control ,IoC)和面向切面(AOP)的容器框架.它的主要目得是简化企业开发. Spring的目标是使已存在的技术更加易用。

所谓依赖注入(DI)就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。

依赖注入(DI)背后的基本原理是对象之间的依赖关系(即一起工作的其它对象)只会通过以下几种方式来实现:构造器的参数、工厂方法的参数,或给由构造函数或者工厂方法创建的对象设置属性。

依赖注入(DI)有两种方法:1、Setter注入2、构造器注入。

 

1、 Setter注入

通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,即可实现基于setter的DI。这时类中无参构造器或无参static工厂两者必须有其中一个。

可以这样理解: Setter注入指的就是在接受注入的类中定义一个Set方法,并在参数中定义需要注入的元素。

java实体类代码:

packagecn.zc.service;

 

public classHelloServiceImpl implements HelloService {

         private String greet;

 

         public void setGreet(String greet) {

                   this.greet = greet;

         }

         public String sayGreet(){

                   return this.greet;

         }

}

xml配置代码:

<?xmlversion="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-2.5.xsd">

 

    <beanid="helloServiceBean" class="cn.zc.service.HelloServiceImpl">

      <!-- propertybean中的属性值 -->

      <property name="greet">

         <value>你好!</value>

      </property>

    </bean>

   

</beans>

 

2、 构造器注入

基于构造器的DI通过调用带参数的构造器来实现,每个参数代表着一个依赖。此外,还可通过给stattic工厂方法传参数来构造bean。

构造器注入注意:构造器参数解析根据参数类型进行匹配,如果bean的构造器参数类型定义非常明确,那么在bean被实例化的时候,bean定义中构造器参数的定义顺序就是这些参数的顺序,依次进行匹配。构造器参数的设置通过<constructor-arg>的type属性设置参数类型,还可以通过index属性来显式指定构造参数的索引,注意index是从0开始。

java代码:

packagecn.zc.service;

 

importjava.util.Date;

 

public classTeacherServiceBean {

         private String name;

         private Integer age;

         private Date birth;

        

         public TeacherServiceBean(String name,Integer age, Date birth) {

                   super();

                   this.name = name;

                   this.age = age;

                   this.birth = birth;

         }

 

         @Override

         public String toString() {

                   return"TeacherServiceBean [name=" + name + ", age=" + age +", birth="

                                     + birth +"]";

         }

        

}

 

xml代码:

<?xmlversion="1.0" encoding="UTF-8"?>

<beansxmlns="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-2.5.xsd">

  

    <bean id="teacherServiceBean"class="cn.zc.service.TeacherServiceBean">

             <constructor-argtype="java.lang.String" index="0" value="军哥"/>

             <constructor-argtype="java.lang.Integer" index="1" value="30"/>

             <constructor-argindex="2" ref="date"/>

    </bean>

   

    <bean id="date" class="java.util.Date"/>

</beans>


原创粉丝点击