您的位置:首页 > 编程语言 > Java开发

Spring——setter方式注入和构造函数方式注入

2015-12-31 15:28 477 查看
     先写一个比较常见的结构:

   

       其中UserDao跟UserManagerImpl是层与层之间的接口。
      下面用这些类来演示setter方式注入跟构造函数注入来解决Manager层注入Dao问题。

一,setter方式注入

        首先要在Manager实现类中定义Dao的私有成员变量,并为此变量添加set方法,注入的时候会自动调用这个set方法对成员变量进行赋值。

      

       之后在配置文件中定义依赖关系:

           <beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
<bean id="userDao4Mysql" class="com.shuitian.spring.dao.UserDaoForMysqlImpl"/>
<bean id="userDao4Oracle" class="com.shuitian.spring.dao.UserDaoForOracleImpl"/>
<bean id="UserManagerImpl" class="com.shuitian.spring.manager.UserManagerImpl">
<!-- 使用property注入对象 -->
<property name="userDao" ref="userDao4Mysql"/>
</bean>

</beans

          通过property中标签中引入userDao4Mysql,将managerImpl实现类中配置好了Dao层具体的实现类。如果需要变动,只需改为上面配置的bean即可。

           

        
BeanFactory beanFactory=new ClassPathXmlApplicationContext("applicationContext.xml");
UserManager userManager=(UserManager)beanFactory.getBean("UserManagerImpl");
userManager.add("dd","d");

         围观下调用Manager的过程:

        没使用注入:

@Override
public void add(String username, String password) {
//由我们的应用程序负责服务(对象)定位
UserDao userDao=new UserDaoForMysqlImpl();
userDao.addUser(username,password);
}

      使用了注入后,userDao对象已经被注入了,至于注入的是哪个实现,不用管:

@Override
public void add(String username, String password) {
userDao.addUser(username,password);
}

            anyway,去掉了手动new的过程,不再将代码写死了。

二,构造函数方式注入

          Manager实现类中:

public UserManagerImpl(UserDao userDao) {
this.userDao = userDao;
}

              将要注入的成员变量放入构造函数中,在实现类被初始的时候,进行注入。

          配置注入关系:
            <bean id="userDao4Mysql" class="com.shuitian.spring.dao.UserDaoForMysqlImpl"/>
<bean id="userDao4Oracle" class="com.shuitian.spring.dao.UserDaoForOracleImpl"/>
<bean id="UserManagerImpl" class="com.shuitian.spring.manager.UserManagerImpl">
<!-- 使用构造函数注入对象 -->
<constructor-arg ref="userDao4Mysql"></constructor-arg>
</bean>

两种注入方式:
                当需要注入的成员变量比较多的时候,使用构造函数注入的方式可能比较麻烦,所以一般推介使用setter方式注入。

     
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: