深入分析JavaWeb Item51 -- Spring依赖注入

页面导航:首页 > 软件编程 > java > 深入分析JavaWeb Item51 -- Spring依赖注入

深入分析JavaWeb Item51 -- Spring依赖注入

来源: 作者: 时间:2016-01-15 15:14 【

一、依赖注入(DI)依赖注入听起来很高深的样子,其实白话就是:给属性赋值。一共有两种方法,第一是以构造器参数的形式,另外一种就是以setting方法的形式。1 构造器注入1 使用构造


一、依赖注入(DI)

依赖注入听起来很高深的样子,其实白话就是:给属性赋值。一共有两种方法,第一是以构造器参数的形式,另外一种就是以setting方法的形式。

1 构造器注入

1 使用构造器注入

使用xml的注入方式

A. 通过参数的顺序

<constructor-arg index="0"><value>张三</value></constructor-arg> <constructor-arg index="1"><value>56</value></constructor-arg> 

    B. 通过参数的类型

    <constructor-arg type="java.lang.Integer"><value>56</value></constructor-arg> <constructor-arg type="java.lang.String"><value>张三</value></constructor-arg> 

      具体实例

      假如现在要对一个Person类注入参数,Student是一个另外一个类。

      public class Person { private String  pid; private String name; private Student student; public Person(String pid, Student student){ this.pid= pid; this.student = student;
          } public Person(String pid, String name){ this.pid  = pid; this.name = name;
          }
      }

        配置applicationContext.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-2.5.xsd"> <bean id="person" class="com.itheima10.spring.di.xml.constructor.Person"> <!-- 
                    不配参数,将会采取默认的构造器
                    constructor-arg person类中某一个构造器的某一个参数
                      index 为参数的角标
                      type  参数的类型
                      value  如果为基础属性,则用这个赋值
                      ref    引用类型赋值
                 --> <constructor-arg index="0" type="java.lang.String" value="aaa"></constructor-arg> <constructor-arg index="1" ref="student"></constructor-arg> </bean> <bean id="person1" class="com.itheima10.spring.di.xml.constructor.Person"> <property name="pid" value="1"></property> </bean> <bean id="student" class="com.itheima10.spring.di.xml.constructor.Student"></bean> </beans> 

          编写测试类DIXMLConstructorTest ,进行断点调试,将会发现根据配置的参数,进入的构造函数是Person(String pid, Student student)

          public class DIXMLConstructorTest {
          
              @Test public void test1(){
                  ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
                  Person person = (Person) context.getBean("person");
              }   
          }

            2 使用属性setter方法进行注入

            使用xml的注入方式:

            A. 简单Bean的注入 
            简单Bean包括两种类型:包装类型和String

            <bean id="personService" class="com.itcast.bean.impl.PersonServiceImpl"> <!-- 基本类型,string类型 --> <property name="age" value="20"></property> <property name="name" value="张无忌"></property> </bean> 

              B. 引用其他Bean

              <bean id="person" class="com.itcast.bean.Person" />
               <bean id="personService" class="com.itcast.bean.impl.PersonServiceImpl">
               <property name="person" ref="person" />
              </bean>

                1.1 装配list集合

                <property name="lists"> <list> <value>list1</value> <value>list2</value> <ref bean="person" /> </list> </property> 

                  1.2 装配set集合

                  <property name="sets"> <set> <value>list1</value> <value>list2</value> <ref