• 【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管理。而且,使用配置的形式,使我们的操作更加灵活方便。

  • 相关阅读:
    用mobiscroll.js如何简单使用日期控件
    Easyui的datagrid的行编辑器Editor中添加事件(修改某个单元格带出其他单元格的值)
    运行网站项目时,有时出现Bad Request,该怎么解决?
    Easyui的datagrid的editor(行编辑器)如何扩展datetimebox类型
    JQuery对象和DOM对象的区别与转换
    【转发】Cookie存储的值大小限制和个数问题
    【转发】centos 7开启FTP以及添加用户配置权限,只允许访问自身目录,不能跳转根目录
    Vim 保存和退出命令
    CentOS下防御或减轻DDoS攻击方法(转)
    CentOS 7 firewalld vsftpd开放端口
  • 原文地址:https://www.cnblogs.com/victor-grace/p/7253656.html
Copyright © 2020-2023  润新知