Spring依赖注入的方式

Spring通过property()和构造函数()对bean的依赖注入进行配置.
对String以及基本类型的注入:通过name/value的形式,如果是数字类型,boolean类型,value指定的值会被自动转换成期望的类型.
与之类似,只是没有name指定参数名称,可以用index指定序号(从0开始).


对对象类类型的注入:通过ref或者内部bean的形式.



     
        
        
    
还可以用"P:"简写方式设置注入:注意必须放在内作为属性定义.

  == p:refBean-ref="RefBean">
对集合类型的注入:对应JAVA的List, Set, Map, and Properties.


            
                a list element followed by a
                    reference
                
            
        

        
            
                just some string
                
            
        

        
            
                
                
            
        

        
            
                [email protected]
                [email protected]
                [email protected]
            
        
设置空字符串和null值:
equals to XXX.setEmail("");
equals to XXX.setEmail(null);
一个完整的例子:

package com.test.spring.di.cfg;

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

public class TestBean {
    private String strVal;
    private int intVal;
    private RefBean refBean;
    private List listVal;
    private Set setVal;
    private Map mapVal;
    private Properties propVal;

    public TestBean(List listVal) {
        this.listVal = listVal;
    }
    public TestBean(String strVal) {
        this.strVal = strVal;
    }
   
    public String getStrVal() {
        return strVal;
    }
    public void setStrVal(String strVal) {
        this.strVal = strVal;
    }
   
    public int getIntVal() {
        return intVal;
    }
    public void setIntVal(int intVal) {
        this.intVal = intVal;
    }
    public RefBean getRefBean() {
        return refBean;
    }
    public void setRefBean(RefBean refBean) {
        this.refBean = refBean;
    }
    public List getListVal() {
        return listVal;
    }
    public void setListVal(List listVal) {
        this.listVal = listVal;
    }
    public Set getSetVal() {
        return setVal;
    }
    public void setSetVal(Set setVal) {
        this.setVal = setVal;
    }
    public Map getMapVal() {
        return mapVal;
    }
    public void setMapVal(Map mapVal) {
        this.mapVal = mapVal;
    }
    public Properties getPropVal() {
        return propVal;
    }
    public void setPropVal(Properties propVal) {
        this.propVal = propVal;
    }
}

public class RefBean {
    public String testFunc(){
        return "Test Function";
    }
}




    

    
        
            
                a list element followed by a reference
                
            
        

        
        
        
            
                just some string
                
            
        

        
            
                
                
            
        

        
            
                [email protected]
                
                [email protected]
                [email protected]
            
        
    

Spring支持自动注入(autowiring),减少XML配置.
通过指定的default-autowire="xxx">其适用范围为该配置文件内的所有bean,注意不是整个context.
也可以对单个bean设定:,如果是byName方式,property的名称和需要reference的bean的ID必须相同,
并且该property必须要有set方法.
使用@Autowired注解的默认是byType,注意一般来将整个context中必须有一个也只能有一个符合这种type的bean,如果context中有多个符合该类型的bean,Spring会看有没有bean的名称和该属性的名称相同,如果能匹配上,则用这个有着相同名称的bean赋值给该属性,否则抛异常.@Autowired注解的成员变量不需要set方法.
@Autowired注解还可以用在方法上,根据方法里面的参数进行匹配.常用的做法是在beans设定default-autowire="byName",把一些常要用的bean按默认名配置,如来简化XML配置.
被依赖的bean将在依赖bean之前被适当的初始化。

你可能感兴趣的:(Spring)