【Spring】Spring依赖注入IOC的设值注入setter

其实标题中如此高大上的名词,只是一个问题,关于在Spring的applicationContext.xml中的如下语句是什么意思?

<property name="aService" ref="aService"/>

这类语句在SSH的配置中会大量存在,因为Spring所谓的核心机制就是Spring依赖注入IOC。下面举一个例子说明这个问题:

先贴上目录结构:

在Eclipse中新建一个Java工程,不是JavaWeb,在这个Java配置好Spring3.0.5,这个在《【Spring】Spring3.0.5的下载、配置与Helloworld》(点击打开链接)已经说过了,这里不再赘述,然后先在src文件夹中新建一个applicationContext.xml,里面的内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://www.springframework.org/schema/beans"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
	<!-- 指明A.java中的aService类,来自service包下AService.java -->
	<!-- A.java中就无须AService aService=new AService();这条语句了 -->
	<bean id="aJava" class="A">
		<property name="aService" ref="aService"/>
	</bean>
	<bean id="aService" class="service.AService"/>
</beans>

然后src新建一个A.java,里面的内容的如下:

import service.*;
public class A {
	private AService aService;
	public void setaService(AService aService) {
		this.aService = aService;
	}
	public void print() {
		System.out.println("A.java在是用AService的print()方法:" + aService.print());
	}
}

之后,在src中新建一个service包,在service里面新建一个AService.java,代码如下:

package service;
public class AService {
	public String print() {
		return "呵呵";
	}
}

之后再于src包里面新建一个SpringTest.java,这个java将包含主函数,是程序的入口,里面的代码如下:

import org.springframework.context.*;
import org.springframework.context.support.*;

public class SpringTest {
	public static void main(String[] args) {
		//初始化Spring
		ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
		//为这个SpringTest.java注入A.java这个类,
		A a=applicationContext.getBean("aJava",A.class);
		//注入之后可以直接使用A这个类
		a.print();
	}
}

这样就可以运行了,运行结果如下:

那么,上面这个程序到底是在说明什么问题呢?就是在说,因为Spring依赖注入IOC的设值注入setter还有Spring自身的特性,以致于整个工程没有一个new语句,方便简单,符合架构设计的规范。因为其下有如下的传值的过程:

非常显然的是,这里当然可以用一句简简单单的System.out.println语句完成,即使要用类,也可以用import与static等语句。不过Spring在JavaWeb工程中,大量的Hibernate语句与数据库查询方法,Struts的Action方法,能够把将其管理起来。

假设上面的A.java是关于Struts2的Action的java文件,AService.JAVA是Hibernate的数据库业务类。那么,你可能不会觉得Spring是在呵呵了。

时间: 2024-10-16 23:04:32

【Spring】Spring依赖注入IOC的设值注入setter的相关文章

spring框架IOC设值注入

spring以动态的形式来管理对象,注入分为两种: 1. 设置注入:直观  自然 2.构造注入:可以在构造器中决定依赖顺序 以下就是示例: 1.User实体类 package com.domain; import java.io.Serializable; /** * * @author Mr * 实体类 */ public class User implements Serializable { private Integer id; private String uname; private

Spring接口编程_设值注入和构造注入

说明: UserManagerImp是设值注入,UserManagerImp2是构造注入 接口不注入,也就是在Spring配置文件中没有接口的<bean>,但是定义的时候是用接口 private IUserDao userDao; IUserManager userManager2=(IUserManager) factory.getBean("userManager2"); 类都注入,①UserManagerImp和UserManagerImp2属于实现类 ②UserDa

依赖注入的实现方式:设值注入和构造方法注入

SSH开发时,一般将项目分成3层:web层.service层和dao层.开发的基本流程是先定义dao接口,然后实现该接口,在定义同类型的service接口,再实现service接口(此时使用dao接口注入),接着再从web层去调用service层. dao层完成的是底层的数据库操作,service层则完成纯粹的业务逻辑,该层中的数据操作部分是通过注入的dao层来实现的.service层的作用是将从dao层取得的数据做更贴近业务的实现,dao层则只实现对数据的增.删.改.查操作.使用这种分层方式更

SpringFramework|@Qualifier 设值注入&amp;构造注入

@Qualifier 设值注入&构造注入 前述 Java: 1.8 Maven: 3 SpringFramework版本以及各组件成员: 5.1.1.RELEASE spring-context spring-core spring-beans 可能会有这样一种情况,当你创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指定哪一个真正的 bean 将会被装配来消除混乱. 示例(

【Spring实战】—— 5 设值注入

本篇主要讲解了Spring的最常用的功能——依赖注入. 注入的方式,是使用Getter Setter注入,平时大多的编程也都是使用这种方法. 举个简单的例子,还是表演者. 表演者有自己的属性,年龄或者表演的歌曲等等.还需要一些复杂的属性,比如乐器,每一种乐器会发出不同的声音. 下面看一下表演者Performer package com.spring.test.action1; public interface Performer { void perform() throws Performan

Spring笔记03(创建对象,DI设值注入,自动装配(autowire))

1.创建对象的三种方式: 01.Animal接口代码: package cn.pb.dao; /** * 动物接口 */ public interface Animal { //吃饭 String eat(); //睡觉 void sleep(); } 02.Animal接口的实现类Dog的代码: package cn.pb.dao.impl; /** * animal的实现类 */ import cn.pb.dao.Animal; public class Dog implements Ani

Spring之依赖配置详解

通过以上的学习,对spring容器和DI的概念应该比较清晰了,DI(依赖注入)作为spring的核心,spring当然提供了一套完善的机制来进行依赖注入.前篇文章从概念上介绍了依赖注入,本篇着重学习spring依赖注入的方法,这里主要采用xml的方式. 基本注入 构造器注入和设值注入是依赖注入的两种主要方式,spring对此有很完善的实现,下面首先以代码的形式进行简要的说明. 构造器注入 Spring容器通过调用bean的构造函数(可能带有几个参数,每个参数代表一个依赖)完成构造器注入.通过静态

spring(3)------控制反转(IOC)/依赖注入(DI)

一,spring核心概念理解 控制反转: 控制反转即IoC (Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理. 所谓的"控制反转"概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器. 没有控制反转这种模式前,你创建一个对象,在什么地方用,你得单独通过关键字new出来用, 但现在可以不用这样,你把new对象的权利交给spring配置文件,通过配置文件来'new', 就是权利的反转,你以前干的事

Spring入门--控制反转(IOC)与依赖注入(DI)

    1.控制反转(Inversion of Control)与依赖注入(Dependency Injection) 控制反转即IoC (Inversion of Control),它把传统上由程序代码直接操控的对象的调用权交给容器,通过容器来实现对象组件的装配和管理.所谓的"控制反转"概念就是对组件对象控制权的转移,从程序代码本身转移到了外部容器. IoC是一个很大的概念,可以用不同的方式来实现.其主要实现方式有两种:<1>依赖查找(Dependency Lookup)