Spring 依赖注入有哪几种方式

97 阅读1分钟

1. 构造器注入

/*带参数,方便利用构造器进行注入*/   
public CatDaoImpl(String message){           

    this. message = message;   

}  

<bean id="CatDaoImpl" class="com.CatDaoImpl">   

    <constructor-arg value=" message "></constructor-arg>   

</bean> 

2. setter方法注入

 public class Id {   

     private int id;   

     public int getId() {   

         return id;  

     }    

     public void setId(int id) {  

         this.id = id;   

     }   

}  

<bean id="id" class="com.id ">  

    <property name="id" value="123"></property>  

</bean>   

3. 静态工厂注入

静态工厂顾名思义,就是通过调用静态工厂的方法来获取自己需要的对象,为了让 spring 管理所有对象,我们不能直接通过"工程类.静态方法()"来获取对象,而是依然通过 spring 注入的形式获取:

public class DaoFactory {   

    //静态工厂       

    public static final FactoryDao getStaticFactoryDaoImpl(){           

        return new StaticFacotryDaoImpl();   

    }   

}   

public class SpringAction {             

    private FactoryDao staticFactoryDao;  //注入对象   

    //注入对象的 set 方法   

    public void setStaticFactoryDao(FactoryDao staticFactoryDao) {           

        this.staticFactoryDao = staticFactoryDao;   

    }

}   

//factory-method="getStaticFactoryDaoImpl"指定调用哪个工厂方法

<bean name="springAction" class=" SpringAction" >   

    <!--使用静态工厂的方法注入对象,对应下面的配置文件-->   

    <property name="staticFactoryDao" ref="staticFactoryDao"></property>             

</bean>   

<!--此处获取对象的方式是从工厂类中获取静态方法-->   

<bean name="staticFactoryDao" class="DaoFactory" factory-method="getStaticFactoryDaoImpl"></bean> 

4. 实例工厂注入

实例工厂的意思是获取对象实例的方法不是静态的,所以你需要首先 new 工厂类,再调用普通的实例方法:

public class DaoFactory {   

    //实例工厂        

    public FactoryDao getFactoryDaoImpl(){           

        return new FactoryDaoImpl();   

    }   

}  

public class SpringAction {       

    private FactoryDao factoryDao;     

    //注入对象         

    public void setFactoryDao(FactoryDao factoryDao) {           

        this.factoryDao = factoryDao;   

    }   

}   

<bean name="springAction" class="SpringAction">   

    <!--使用实例工厂的方法注入对象,对应下面的配置文件-->   

    <property name="factoryDao" ref="factoryDao"></property>       

</bean>   

<!--此处获取对象的方式是从工厂类中获取实例方法-->   

<bean name="daoFactory" class="com.DaoFactory"></bean>   

<bean name="factoryDao" factory-bean="daoFactory" factory-method="getFactoryDaoImpl"></bean>