Spring Ioc注入的四种方式

来源:互联网 发布:hptv和平网络电视 编辑:程序博客网 时间:2024/06/02 15:52

Spring支持的注入方式共有四种:set注入、构造注入、静态工厂注入、实例化工厂.


以下列举常用的两个注入的方式:

一:set注入


1.创建一个UserDao的类

package com.shuaiwen.dao;    public void saveDao(){public class UserDao {        System.out.println("userDao层的saveDao...");    }}

2.创建一个service,通过创建UserService的getter方法,把UserDao对象作为参数传入

package com.shuaiwen.service;import com.shuaiwen.dao.UserDao;public class UserService {    private UserDao userDao;    public UserService() {        super();    }    //通过set注入    public void setUserDao(UserDao userDao) {        this.userDao = userDao;    }    public void saveService(){        userDao.saveDao();    }}

3.设置.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">    <!-- set注入 -->    <bean id="userService" class="com.shuaiwen.service.UserService">        <property name="userDao" ref="userDao"></property>    </bean>    <bean id="userDao" class="com.shuaiwen.dao.UserDao"></bean> </beans>

二、构造器注入


1.和上面一样创建那两个class类

package com.shuaiwen.dao;public class UserDao {    public void saveDao(){        System.out.println("userDao层的saveDao...");    }}

2.然后创建UserService的带参构造,把userDao注入其中。

package com.shuaiwen.service;import com.shuaiwen.dao.UserDao;public class UserService {    private UserDao userDao;    public UserDao getUserDao() {        return userDao;    }       public UserService() {        super();        // TODO Auto-generated constructor stub    }    //创建带参构造    public UserService(UserDao userDao) {        super();        this.userDao = userDao;    }    public void saveService(){        userDao.saveDao();    }}

3.配置.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">    <!-- 构造器注入 -->    <!-- <bean id="userService" class="com.shuaiwen.service.UserService">        <constructor-arg ref="userDao"></constructor-arg>    </bean>    <bean id="userDao" class="com.shuaiwen.dao.UserDao"></bean> --></beans>

还有一个问题:

  • A类中注入了B类对象
  • B类中注入了A类对象

循环依赖——在采用构造器注入的方式配置bean时,很有可能会产生循环依赖的情况

对于此问题,一个可能的解决方法就是修改源代码,将某些构造器注入改为setter注入。另一个解决方法就是完全放弃构造器注入,只使用setter注入。

0 0
原创粉丝点击