Spring Bean管理(XML方式)之属性注入方式及构造方法的属性注入

Spring的属性注入

对于类成员变量,注入有三种方式

1、构造函数注入

2、属性setter方法注入

3、接口注入

[v_warn]Spring支持前两种[/v_warn]

构造方法注入

通过构造方法注入Bean的属性值或依赖的对象,它保证了Bean实例在实例化后就可以使用。

构造器注入在元素里声明的属性

实例演示

新建一个demo4,创建一个User类。

package com.jikewenku.ioc.demo4;

public class User {
    private String name;
    private Integer age;

    public User(String name,Integer age){
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

接下来对它进行测试,先将这个类配置到Spring中去


  
   

再新建一个测试类SpringDemo4,写一个测试方法

@Test
public void demo1(){
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    User user = (User)applicationContext.getBean("user");
    System.out.println(user);
}

运行程序,可以看到值已经显示出来了。

set方法注入

使用set方法注入,在Spring配置文件中,通过设置注入的属性,开发中更习惯于这种方式。

新建一个Person类

package com.jikewenku.ioc.demo4;

public class Person {
    private String name;
    private Integer age;

    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;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

配置文件中进行配置


        
        

SpringDemo4中编写测试类

@Test
public void demo2(){
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    Person person = (Person)applicationContext.getBean("person");
    System.out.println(person);
}

运行程序,结果如下

p名称空间

使用p命名空间:为了简化XML文件配置,Spring从2.5开始引入一个新的p名称空间

p:<属性名>=”xxx”引入常量值

p:<属性名>-ref=”xxx”引用其他Bean对象

编写配置文件


剩下的操作和前面类似,就不详细介绍了。

SpEL注入

SpELl:spring expression language,spring表达式语言,对依赖注入进行简化

语法:#{表达式}

[v_notice]
SpEL表达式语言

语法:#{}

#{‘hello’}:使用字符串

#{topicId3}:使用另一个bean

#{topicId4.content.toUpperCase()}:使用指定名属性,并使用方法

#{T{java.lang.Math}.PI}:使用静态字段或方法[/v_notice]

代码演示

新建一个类Product

package com.jikewenku.ioc.demo4;

public class Product {
    private String name;
    private Double price;

    private Category category;

    public String getName() {
        return name;
    }

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

    public Double getPrice() {
        return price;
    }

    public void setPrice(Double price) {
        this.price = price;
    }

    public Category getCategory() {
        return category;
    }

    public void setCategory(Category category) {
        this.category = category;
    }

    @Override
    public String toString() {
        return "Product{" +
                "name='" + name + '\'' +
                ", price=" + price +
                ", category=" + category +
                '}';
    }
}

新建一个类Category

package com.jikewenku.ioc.demo4;

public class Category {
    private String name;

    public String getName() {
        return name;
    }

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

    @Override
    public String toString() {
        return "Category{" +
                "name='" + name + '\'' +
                '}';
    }
}

在配置文件中编写


    
        
    


        
    

SpringDemo4中编写测试类

@Test
public void demo3(){
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
    Product product = (Product)applicationContext.getBean("product");
    System.out.println(product);
}

运行程序,观察结果

假设此时想调用另外一个Bean的方法,这时候应该怎么写呢?

新建一个类ProductInfo

package com.jikewenku.ioc.demo4;

public class ProductInfo {

    public Double calculatePrice(){
        return Math.random() * 199;
    }
}

编写配置文件




        
        
        
    

再运行一下刚才的测试类Demo3

复杂类型的属性注入

数组类型的属性注入

List集合类型的属性注入

Set集合类型的属性注入

Map集合类型的属性注入

Propertis类型的属性注入

代码演示

新建一个包demo5,新建一个CollectionBean

package com.jikewenku.ioc.demo5;

import java.util.*;

public class CollectionBean {
    private String[] arrs; // 数组类型

    private List list;// List集合类型

    private Set set; // Set集合类型

    private Map map;// Map集合类型

    private Properties properties; // 属性类型

    public String[] getArrs() {
        return arrs;
    }

    public void setArrs(String[] arrs) {
        this.arrs = arrs;
    }

    public List getList() {
        return list;
    }

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

    public Set getSet() {
        return set;
    }

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

    public Map getMap() {
        return map;
    }

    public void setMap(Map map) {
        this.map = map;
    }

    public Properties getProperties() {
        return properties;
    }

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

    @Override
    public String toString() {
        return "CollectionBean{" +
                "arrs=" + Arrays.toString(arrs) +
                ", list=" + list +
                ", set=" + set +
                ", map=" + map +
                ", properties=" + properties +
                '}';
    }
}

编写配置文件



    
    
        
            aaa
            bbb
            ccc
        
    
    
    
        
            111
            222
            333
        
    
    
    
        
            ddd
            eee
            fff
        
    
    
    
        
            
            
            
        
    
    
    
        
            root
            1234
        
    

新建一个测试类SpringDemo5

@Test
public void demo1(){
    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

   CollectionBean collectionBean = (CollectionBean)applicationContext.getBean("collectionBean");

   System.out.println(collectionBean);
}

运行程序

本站所有文章均由网友分享,仅用于参考学习用,请勿直接转载,如有侵权,请联系网站客服删除相关文章。若由于商用引起版权纠纷,一切责任均由使用者承担
极客文库 » Spring Bean管理(XML方式)之属性注入方式及构造方法的属性注入

欢迎加入「极客文库」,成为原创作者从这里开始!

立即加入 了解更多