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

先写一个比较常见的结构:

其中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方式注入。

时间: 2024-10-07 05:06:23

Spring——setter方式注入和构造函数方式注入的相关文章

javascript 构造函数方式定义对象 (转载)

javascript 构造函数方式定义对象 javascript是动态语言,可以在运行时给对象添加属性,也可以给对象删除(delete)属性 <html> <head> <script type="text/javascript"> /* //01.定义对象第一种方式 var object =new Object(); alert(object.username); //01.1增加属性username object["username&q

spring学习一——基本搭建,属性注入的两种方式

今天用spring 3.2.5搭建了基本的环境,spring出的太快了,前段时间才3.2.5,今儿个一瞧已经上了4的版本了,稍后给出spring的jar下载地址,毕竟现在官网上找不到了啊. 废话少说了,spring 3.2.5已经将所有的依赖包都放在了dist的lib下面,并且都有doc包和源码包,很是方便.先导入所需的jar包:core,context,beans,expression 四个jar包,除此之外,还需导入commons-logging. 下一步,新建xml文件,建议名称为 app

Spring的几种注入bean的方式

在Spring容器中为一个bean配置依赖注入有三种方式: · 使用属性的setter方法注入  这是最常用的方式: · 使用构造器注入: · 使用Filed注入(用于注解方式).   使用属性的setter方法注入 首先要配置被注入的bean,在该bean对应的类中,应该有要注入的对象属性或者基本数据类型的属性.例如:为UserBiz类注入UserDAO,同时为UserBiz注入基本数据类型String,那么这时,就要为UserDAO对象和String类型设置setter方法.,用于进行依赖注

Spring事务Transaction配置的五种注入方式详解

Spring事务Transaction配置的五种注入方式详解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的. ??? 总结如下: ??? Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource.TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分. ???DataSou

Spring 依赖注入(一、注入方式)

注入方式主要有:属性注入.构造注入等 下面看一个实例: 1.新建一个接口IPet package entities; public interface IPet { public String getName(); public void setName(String name); public void sleep(); } 2.新建两个类Dog和Cat package entities; public class Cat implements IPet{ //程序运行时,Cat的属性会被xm

Spring:(二)DI依赖注入方式

DI 依赖注入 DI(Dependency Injection)依赖注入,说简单一点就将类里面的属性在创建类的过程中给属性赋值,即将对象依赖属性(简单值,集合,对象)通过配置设值给该对象. 属性注入的方式 构造方法的方式 set方法的方式 工厂方法注入 主要学习前两种方式 构造方法的方式 当是构造方法时注入Bean的属性值(简单值,集合,对象) 利用<constructor-arg>标签进行属性的注入 name:被设置属性的名 value:被设置属性的值 编写用构造方法的pojo 1 pack

【初识Spring】对象(Bean)实例化及属性注入(xml方式)

title: [初识Spring]对象(Bean)实例化及属性注入(xml方式) date: 2018-08-29 17:35:15 tags: [Java,Web,Spring] --- ?#初识Spring之Bean实例化及属性注入 1.通过xml配置的方式进行实例化. 配置文件中bean标签的常用属性 通过无参构造(常用) 使用静态工厂进行创建 使用实例工厂进行创建 2.属性注入. 使用有参数构造方法注入属性 使用set方法注入属性(常用) 注入对象类型属性 注入复杂类型属性 xml配置的

SpringDI--依赖注入(配置文件方式)

方式一:Set注入 UserDao: package com.spring.demo02; public class UserDao { public void save() { System.out.println("持久层..."); } } UserService: package com.spring.demo02; public class UserService { //配置文件注入:提供成员属性,设置set方法 private UserDao userDao; publi

依赖注入的实现方式

1.构造方法注入 顾名思义,构造方法注入,就是被注入对象可以通过在其构造方法中声明依赖对象的参数列表,让外部(通常是IoC容器)知道它需要哪些依赖对象. IoC Service Provider 会检查被注入对象的构造方法,取得它所需要的依赖对象列表,进而为其注入相应的对象.同一个对象是不可能被构造两次的,因此,被注入对象的构造乃至其整个生命周期,应该是由IoC Service Provider 来管理的. 构造方法注入方式比较直观,对象被构造完成后,即进入就绪状态,可以马上使用. 2.sett