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

  • 相关阅读:
    注释
    Servlet原理和开发
    什么是Servlet
    Java基础目录
    实现第一个Servlet
    Servlet的体系
    习题3
    利用ResultFilter实现asp.net mvc3 页面静态化
    oracle欲出纯托管代码的ODP.NET,现接受小范围预览版本使用申请
    http请求头中包含未编码中文时webapi self host崩溃
  • 原文地址:https://www.cnblogs.com/victor-grace/p/7253656.html
Copyright © 2011-2022 走看看