首页 > 代码库 > spring各种类型的属性注入

spring各种类型的属性注入

spring test + Junit方式:


pox.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.try2better</groupId>
    <artifactId>spring</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <spring.version>4.3.9.RELEASE</spring.version>
    </properties>

    <dependencies>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/junit/junit -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>

        <!-- spring end -->
    </dependencies>
</project>

Java:

package beans;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;

/*
 * DESCRIPTION : 
 * USER : zhouhui
 * DATE : 2017/8/10 15:49
 */
public class Bean {

    private Integer inte;
    private String str;
    private String[] strArr;
    private Boss boss;
    private List<String> list;
    private Set<String> set;
    private Map<String,Boss> map;
    //Properties和Map的区别是,Properties只能接受key和value都是String
    private Properties properties;

    public Integer getInte() {
        return inte;
    }

    public void setInte(Integer inte) {
        this.inte = inte;
    }

    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }

    public String[] getStrArr() {
        return strArr;
    }

    public void setStrArr(String[] strArr) {
        this.strArr = strArr;
    }

    public Boss getBoss() {
        return boss;
    }

    public void setBoss(Boss boss) {
        this.boss = boss;
    }

    public List<String> getList() {
        return list;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public Set<String> getSet() {
        return set;
    }

    public void setSet(Set<String> set) {
        this.set = set;
    }

    public Map<String, Boss> getMap() {
        return map;
    }

    public void setMap(Map<String, Boss> map) {
        this.map = map;
    }

    public Properties getProperties() {
        return properties;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }

    @Override
    public String toString() {
        return "Bean{" +
                "inte=" + inte +
                ", str=‘" + str + ‘\‘‘ +
                ", strArr=" + Arrays.toString(strArr) +
                ", boss=" + boss +
                ", list=" + list +
                ", set=" + set +
                ", map=" + map +
                ", properties=" + properties +
                ‘}‘;
    }
}

实体:

package beans;

/*
 * DESCRIPTION : 
 * USER : zhouhui
 * DATE : 2017/8/10 11:19
 */
public class Boss {

    private String name;
    private Integer age;
    private Boolean isMale;

    public Boss() {
    }

    public Boss(String name, Integer age, Boolean isMale) {
        this.name = name;
        this.age = age;
        this.isMale = isMale;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Boolean getMale() {
        return isMale;
    }

    public void setMale(Boolean male) {
        isMale = male;
    }

    @Override
    public String toString() {
        return "Boss{" +
                "name=‘" + name + ‘\‘‘ +
                ", age=" + age +
                ", isMale=" + isMale +
                ‘}‘;
    }
}

spring 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">

    <import resource="bean.xml"/>

    <bean id="boss" class="beans.Boss">
        <property name="age" value="http://www.mamicode.com/10"/>
        <property name="male" value="http://www.mamicode.com/false"/>
        <property name="name" value="http://www.mamicode.com/zhouhui"/>
    </bean>

    <bean id="boss2" class="beans.Boss" scope="singleton">
        <constructor-arg name="age" value="http://www.mamicode.com/11"/>
        <constructor-arg name="name" value="http://www.mamicode.com/zhouhui2"/>
        <constructor-arg name="isMale" value="http://www.mamicode.com/true"/>
    </bean>

    <bean id="boss3" class="beans.Boss">
    </bean>

    <bean id="bossService" class="impl.BossServiceImpl">
        <property name="boss" ref="boss2"></property>
    </bean>

</beans>

bean 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">

    <!-- boss对象的bean -->
    <bean id="myBoss" class="beans.Boss">
        <property name="age" value="http://www.mamicode.com/10"/>
        <property name="male" value="http://www.mamicode.com/false"/>
        <property name="name" value="http://www.mamicode.com/zhouhui"/>
    </bean>

    <bean id="bean" class="beans.Bean">
        <!-- private Boss boss; -->
        <property name="boss" ref="myBoss"/>

        <!-- private Integer inte; -->
        <property name="inte" value="http://www.mamicode.com/1"/>

        <!-- private String str; -->
        <property name="str" value="http://www.mamicode.com/hello world"/>

        <!-- private String[] strArr; -->
        <property name="strArr">
            <list>
                <value>NO.1</value>
                <value>NO.2</value>
                <value>NO.3</value>
            </list>
        </property>

        <!-- private List<String> list; -->
        <property name="list">
            <list>
                <value>INDEX 1</value>
                <value>INDEX 2</value>
                <value>INDEX 3</value>
            </list>
        </property>

        <!-- private Map<String,Boss> map; -->
        <property name="map">
            <map>
                <entry key="entity 1" value-ref="myBoss"></entry>
                <entry key="entity 2" value-ref="myBoss"></entry>
                <entry key="entity 3" value-ref="myBoss"></entry>
            </map>
        </property>

        <!-- private Set<String> set; -->
        <property name="set">
            <set>
                <value>set 1</value>
                <value>set 2</value>
                <value>set 3</value>
            </set>
        </property>

        <!-- private Properties properties; -->
        <property name="properties">
            <props>
                <prop key="key1">value1</prop>
                <prop key="key2">value2</prop>
                <prop key="key3">value3</prop>
            </props>
        </property>
    </bean>
</beans>


测试类:

package test;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import javax.annotation.Resource;

import beans.Bean;
import beans.Boss;
import business.BossService;

/*
 * DESCRIPTION :
 * USER : zhouhui
 * DATE : 2017/8/10 11:25
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath*:spring-content.xml" })
public class TestSpringBeans {

    @Resource(name = "boss3")
    private Boss boss;
    @Autowired
    private Boss boss2;
    @Autowired
    private Boss boss3;

    @Autowired
    private BossService bossService;
    @Autowired
    private Bean bean;

    /**
     * @Autowired 是根据bean的id,完全匹配注入
     * @Resource(name = "boss3") 指定nid匹配注入
     */
    @org.junit.Test
    public void test(){
        System.out.println("============test===============");
        System.out.println(boss.toString());
        System.out.println(boss2.toString());
        System.out.println(boss3.toString());
        //默认是单例的,如果需要是多例的需要设置scope="singleton"
        System.out.println(boss == boss2);
        System.out.println("=============test==============");
    }

    /**
     * 测试接口的注入,必须在xml种指定实现,不然Java中不予许对interface进行@Autowired
     */
    @Test
    public void testInterface(){
        System.out.println("============testInterface===============");
        System.out.println(bossService.getBossEntity());
        System.out.println("============testInterface===============");
    }

    /**
     * 对数组 集合等各种类型的属性进行注入
     */
    @Test
    public void testBean(){
        System.out.println("===========testBean================");
        System.out.println(bean);
        System.out.println("===========testBean================");
    }
}

执行结果:

============test===============
Boss{name=‘null‘, age=null, isMale=null}
Boss{name=‘zhouhui2‘, age=11, isMale=true}
Boss{name=‘null‘, age=null, isMale=null}
false
=============test==============

============testInterface===============
Boss{name=‘zhouhui2‘, age=11, isMale=true}
============testInterface===============

===========testBean================
Bean{inte=1, str=‘hello world‘, strArr=[NO.1, NO.2, NO.3], boss=Boss{name=‘zhouhui‘, age=10, isMale=false}, list=[INDEX 1, INDEX 2, INDEX 3], set=[set 1, set 2, set 3], map={entity 1=Boss{name=‘zhouhui‘, age=10, isMale=false}, entity 2=Boss{name=‘zhouhui‘, age=10, isMale=false}, entity 3=Boss{name=‘zhouhui‘, age=10, isMale=false}}, properties={key3=value3, key2=value2, key1=value1}}
===========testBean================


spring各种类型的属性注入