Spring依赖注入

Spring注入方式大体可以分为4种

1.构造器注入

2.set注入

3.静态工厂注入
4.实例工厂注入

比较常用的的是前两种,我们就来看一下前两种。

 

首先来看下构造器注入

第一步、先创建一个javabean

 1 public class Person {
 2     //姓名
 3     private String name;
 4     //年龄
 5     private String age;
 6     //构造方法
 7     public Person(String name, String age) {
 8         super();
 9         this.name = name;
10         this.age = age;
11     }
12     //一个普通方法
13     public void save(){
14         System.out.println("save被执行"+"name:"+name+"   age:"+age);
15     }
16 }

第二步、然后创建一个Spring容器所需要的配置文件applicationContext.xml

 

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans
 3     xmlns="http://www.springframework.org/schema/beans"
 4     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 5     xmlns:p="http://www.springframework.org/schema/p"
 6     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
 7     <!--id表示这个bean的名称    class这个类的全限定名称,说白了就是加上包的类名-->
 8     <bean id="person" class="myspring.Person">
 9         <!--name对应bean里边构造器的参数,value对饮bean中的值-->
10         <!--type类型,基本数据类型可不写type-->
11         <constructor-arg name="name" value="bin" type="java.lang.String"></constructor-arg>
12         <constructor-arg name="age" value="20"></constructor-arg>
13     </bean>
14 </beans>

 

第三步、然后创建一个测试的类Snippet.java

public class Snippet {
    public static void main(String[] args) {
        /**
         * 构造器注入
         * applicationContext.xml存放Spring配置文件的文件
         * 如果不在src下,这要写上具体的路径
         */
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //返回的是Object对象,要进行类型转换
        Person p = (Person)context.getBean("person");
        p.save();
    }
}

 运行结果:save被执行name:bin   age:20

 

然后我们再来看set注入

set注入依靠<property></property> 标签进行参数注入

 

    <!--类比于构造器注入  -->
    <!--不同点在于,set注入需要提供set方法,构造器注入需要构造方法 -->
    <!--指定属性的标签不一样-->
    <bean id="person" class="myspring.Person">
        <property name="name" value="bin"></property>
        <property name="age" value="20"></property>
    </bean>

 

set注入的javabean需要提供set方法,如下

public class Person {
    //姓名
    private String name;
    //年龄
    private String age;//一个普通方法
    public void save(){
        System.out.println("save被执行"+"name:"+name+"   age:"+age);
    }
    //set方法
    public void setName(String name) {
        this.name = name;
    }
    //set方法
    public void setAge(String age) {
        this.age = age;
    }
}

 测试类同构造器注入的测试类一样,程序执行结果相同

 不仅仅是可以注入基本数据类型,还可以进行类类型的注入

<!--ref指向要注入bean的id  -->
    <bean id="snippet" class="myspring.Snippet">
        <property name="p" ref="person"></property>
    </bean>
    
    <!--类比于构造器注入  -->
    <!--不同点在于,set注入需要提供set方法,构造器注入需要构造方法 -->
    <!--指定属性的标签不一样-->
    <bean id="person" class="myspring.Person">
        <property name="name" value="bin"></property>
        <property name="age" value="20"></property>
    </bean>

如上图person类通过set注入的方式注入到snippet类中

public class Snippet {
    
    //声明被注入的类
    private Person p;
    //set方法
    public void setP(Person p) {
        this.p = p;
    }
}

如上图在使用Snippet中的P时,容器会自动创建一个Person的实例,省去了我们自己手动new的过程,是不是方便了许多

不仅仅是类可以这样进行创建,set,list等集合也可以使用同样的方法创建,看下面配置文件

    <!--ref指向要注入bean的id  -->
    <bean id="snippet" class="myspring.Snippet">
        <!-- name要注入数组的名称,value数组里面的值 -->
        <property name="list">
            <list>
                <value>value1</value>
                <value>value2</value>
                <value>value3</value>
            </list>
        </property>
    </bean>

这样子就可以将一个list集合注入到Snippet的实例中了

posted @ 2017-01-16 09:03  kongbin  阅读(183)  评论(0)    收藏  举报