zoukankan      html  css  js  c++  java
  • 【Spring】--Spring方法注入

      通常我们在程序中会使用new关键字来实现一个类依赖于另一个类,这样虽然可以实现需求。但是也存在一个问题,就是不容易统一管理。而Spring提出了依赖注入的思想,使用Spring容器来进行注入,也称为控制反转。

      常用的注入方法有两种:构造函数法和set注入

       1、构造函数法

         在需要注入的java类中创建构造函数,如下:     

    package com.tgb.spring.manager;
    
    import com.tgb.spring.dao.IUserDao;
    
    public class UserManagerImp implements IUserManager {
    
    	private IUserDao userDao;
    	
    	//构造函数法进行spring注入
    	public UserManagerImp(IUserDao userDao){
    		this.userDao=userDao;
    	}	
    
    	@Override
    	public void addUser(String username, String password) {
                userDao.addUser(username, password);
    	}
    	
    }
    
          在Spring配置文件中进行如下配置:        

    <?xml version="1.0" encoding="UTF-8"?>
    
    <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">
      <!-- 配置dao层的实现 -->
      <bean id="userDao4Mysql" class="com.tgb.spring.dao.UserDao4MySqlImp"/>  
      <bean id="usrDao4Oracle" class="com.tgb.spring.dao.UserDao4OracleImp"/>
      <!-- 配置manager层 -->
      <bean id="userManager" class="com.tgb.spring.manager.UserManagerImp">
      	<!-- manager指向配置好的dao层   这样就不用在manager中使用new dao-->
      	<!-- 构造函数法注入 指向dao层实现的方法,即上述dao层实现的id值-->
       	 <constructor-arg ref="userDao4Mysql"/>   
       	
      </bean>
    </beans>
    
        注意:

          (1)在需要注入的类中创建构造函数。

          (2)在Spring配置文件中使用<constructor-arg>标签来设置需要注入的类

       2、set方法设置

        在需要注入的java类中添加set方法,如下:     

    package com.tgb.spring.manager;
    
    import com.tgb.spring.dao.IUserDao;
    
    public class UserManagerImp implements IUserManager {
    
    	private IUserDao userDao;
    	
    	
    	//使用set方法进行spring注入
    	public void setUserDao(IUserDao userDao) {
    		this.userDao = userDao;
    	}
    
    	@Override
    	public void addUser(String username, String password) {
               userDao.addUser(username, password);
    	}
    
    	
    }
    
        在Spring配置文件中进行如下配置:

          

    <?xml version="1.0" encoding="UTF-8"?>
    
    <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">
      <!-- 配置dao层的实现 -->
      <bean id="userDao4Mysql" class="com.tgb.spring.dao.UserDao4MySqlImp"/>  
      <bean id="usrDao4Oracle" class="com.tgb.spring.dao.UserDao4OracleImp"/>
      <!-- 配置manager层 -->
      <bean id="userManager" class="com.tgb.spring.manager.UserManagerImp">
      	<!-- manager指向配置好的dao层   这样就不用在manager中使用new dao-->
      	 
       	<!-- set方法注入 -->
       	 <property name="userDao" ref="usrDao4Oracle"/>
      </bean>
    </beans>
    
        注意:

          (1)在需要注入的类中必须实现set方法

          (2)在Spring配置文件中使用<property>标签进行类指向。


       小结:

          通过上述配置实现,我们很容易发现使用Spring注入相对于之前使用new方式的优势,大量减少Factory和Singleton数量,使代码层次更加清晰。查找、定位、创建和管理对象关系,都由IOC管理。而且,使用配置的形式,使我们的操作更加灵活方便。

  • 相关阅读:
    剑指Offer_栈的压入序列是否有对应的弹出序列
    剑指Offer_Java_顺时针打印矩阵(二维数组)
    排序算法Java代码实现(四)—— 归并排序
    排序算法Java代码实现(六)—— 堆排序
    排序算法Java代码实现(五)—— 快速排序
    排序算法Java代码实现(三)—— 插入排序 和 希尔排序
    CSS sprites
    局部变量和参数传递的问题
    隐藏元素的方式有哪些
    box-sizing属性的的用法
  • 原文地址:https://www.cnblogs.com/victor-grace/p/7253656.html
Copyright © 2011-2022 走看看