Spring_4 属性注入介绍及使用

IOC 和 DI 区别

  • IOC : 控制反转,把对象创建交给spring 进行配置。
  • DI : 依赖注入,向类里面的属性中设置值。
  • 关系 : 依赖注入不能单独存在,需要在IOC基础之上完成操作。

属性注入

属性注入是在创建对象时候,向类里面属性里面设置值。

在 Java 中属性注入的三种方式

  1. 使用 set 方法注入
public class User{
    private String name;
    public void setName(String name){
        this.name = name;
    }
}

User user = new User();
user.setName("abcd");
  1. 使用有参构造注入
public class User{
    private String name;
    public User(String name){
        this.name = name;
    }
}

User user = new User("abc");
  1. 使用接口注入
public interface Dao{
    public void insert(String name);
}

public class DaoImpl implements Dao{
    private String name;
    
    public void insert(String name){
        this.name = name;
    }
}

在 Spring 框架里面,支持两种方式

  1. set 方法注入(重点)

实体类

package com.sfox.bean;

public class Book {
    private String name;
    public void setName(String name){
        this.name = name;
    }
    
    public void putMsg(){
        System.out.println("out put name:" + name);
    }
}


beans.xml配置



    
    

  1. 有参数构造注入

实体类

package com.sfox.bean;

public class Book {
    private String name;
    public Book(String name){
        this.name = name;
    }
    
    public void putMsg(){
        System.out.println("out put name:" + name);
    }
}

上面代码是使用set方法注入属性值,需要注意一下几点,

  • 要在对应的实体类中添加需要注入的属性的set方法。
  • beans.xml 中name 对应实体中的要注入的属性名,value 是name设置的属性值对应的内容。

beans.xml 配置



    
    
    
        
    

通过上面代码,可以知道有参构造注入的方法,在使用有参构造注入的时候,需要注意,在beans.xml 文件中bean的配置, name 对应实体中的要注入的属性名,value 是name设置的属性值对应的内容。

注入对象类型属性值

下面的示例是向一个 Service 中注入一个 Dao ,在Service 中调用注入的 Dao.


实体Service

package com.sfox.bean;

public class ServiceDao {
    
    private BookDao bookDao;
    
    public void setBookDao(BookDao bookDao){
        this.bookDao = bookDao;
    }
    
    public void serviceOut(){
        System.out.println("service out......");
        bookDao.bookDaoOut();
    }
}


实体Dao

package com.sfox.bean;

public class BookDao {
    public void bookDaoOut(){
        System.out.println("book Dao....");
    }
}


beans.xml配置



    
    
    
        
        
    

P 命名空间注入

p命名空间注入和上面介绍的有些相同,很简单,在约束中加入如下约束:

xmlns:p="http://www.springframework.org/schema/p"

好了,现在我们就可以使用p命名空间注入了。
P命名空间注入bean配置也非常简单,看下面示例:

  • 实体类:

    public class UserP {
        private String pname;
        public void setPname(String pname) {
            this.pname = pname;
        }
        
        public void show() {
            System.out.println("pname:" + pname);
        }
    }
    
    
  • beans.xml 中bean 的配置



        

说明:在约束中定义P命名空间,然后在bean 中使用 p:变量 对变量进行赋值。

复杂类型注入

复杂类型注入其实也非常简单,在标签中使用,具体看下面示例:

  1. 数组
  2. list 类型
  3. set 类型
  4. map 类型
  5. properties 类型
  • 创建实体bean
public class MultType {
    private String[] arr;
    private ArrayList list;
    private Set set;
    private Map map;
    private Properties properties;
    public void setArr(String[] arr) {
        this.arr = arr;
    }
    public void setList(ArrayList list) {
        this.list = list;
    }
    public void setSet(Set set) {
        this.set = set;
    }
    public void setMap(Map map) {
        this.map = map;
    }
    public void setProperties(Properties properties) {
        this.properties = properties;
    }
    public void show() {
        System.out.println( "MultType [arr=" + Arrays.toString(arr) + ", list=" + list
                + ", set=" + set + ", map=" + map + ", properties="
                + properties + "]");
    }
}

下面我们看一下beans.xml 中如何配置向bean 中注入结合属性的:




        
            
            
                
                    arr1
                    arr2
                    arr3
                
            
            
            
            
                
                    zhangsan
                    wangwu
                
            
            
            
                
                    hello
                    good
                
            
            
            
                
                    
                    
                    
                
            
            
            
                
                    pro.value1
                    pro.value2
                
            
        

你可能感兴趣的:(Spring_4 属性注入介绍及使用)