spring IOC实验

                 软件151 朱实友

(1)基于XML的配置元数据的基本结构

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<!--配置bean的ID,Class类全名等属性,在标签中还会有property等子标签均与该bean相关(需要根据bean来设置)-->

<bean id="..." class="...">

</bean>

<bean id="..." class="...">

</bean>

</beans>

例如:

<bean id="greetingServiceImpl" class="cn.csdn.service.GreetingServiceImpl">

<property name="say">

<value>你好!</value>

</property>

</bean>

对应的Bean的GreetingServiceImpl:

package cn.csdn.service;

public class GreetingServiceImpl implements GreetingService {

/**私有属性*/

private String say;

@Override

public void say() {

System.out.println("你打的招呼是:"+say);

}

public void setSay(String say){

this.say=say;

}

该类继承的接口GreetingService:

package cn.csdn.service;

public interface GreetingService {

void say();

}

那么何为Spring的IoC控制反转呢?

我们来创建一个JUnit测试类:

package cn.csdn.junit;

import org.junit.Test;

import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import org.springframework.context.support.FileSystemXmlApplicationContext;

import cn.csdn.service.GreetingService;

public class GreetingTest {

/**测试GreetingServiceImpl的方法*/

@Test

public void test1(){

/**加载spring容器  可以解析多个配置文件 采用数组的方式传递*/

ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});

/**IOC的控制反转体现*/

GreetingService greetingService = (GreetingService) ac.getBean("greetingServiceImpl");

greetingService.say();

}

}

在测试类中我们看到想要实现IoC的控制反转,首先应该加在容器:

加在容器的写法有以下几种:

①   可以同时配置多个XML描述文件

ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});

②   只能描述当前项目路径下的一个XML描述文件

ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");

③   使用匹配的方法在路径下寻找符合条件的XML描述文件

ApplicationContext ac = new ClassPathXmlApplicationContext("classpath:app*.xml");

然后,我们需要通过IoC的反转机制获得Bean的对象:

GreetingService greetingService = (GreetingService) ac.getBean("greetingServiceImpl");

最后,我们通过获得Bean对象调用Bean中的方法,输出如下:

打的招呼是:你好!

时间: 2024-11-10 13:28:33

spring IOC实验的相关文章

Spring IoC/DI

前言 假设项目层次划分包括logic层和dao层,logic层调用dao层完成业务逻辑,dao层一般与数据库交互.定义两个组件,TestLogic和TestDao,分别操作接口ILogic和IDao,这样程序开发时需要考虑怎样管理这两个组件. 传统方式 这种方式中,当TestLogic组件需要调用TestDao组件时,直接使用关键字new IDao testDao = new TestDao(); 这种方式简单直观,但造成了对外部组件的严重依赖,程序高度耦合,效率低下.当项目需要更换组件时需要修

手把手教你实现Spring ioc

手把手教你实现Spring ioc "Don't call us, we'll call you(不要联系我,我会主动联系你)" 这是好莱坞很经典的一句话,应用在ioc(控制反转)领域,发现理解起来相得益彰--你作为用户不需要控制业务实体的生成,交给我容器来控制,这就是控制反转.不过,这样理解起来也有点麻烦,套用面向对象大师Martin Fowler的说法更为贴切: "Dependency Inversion(依赖注入)" 当容器中所有的实体bean 都被管理起来的

Spring IOC的实现

来源:知乎 https://www.zhihu.com/question/21035417/answer/142858103 著作权归作者所有. Spring IOC的实现部分,主要分为三个部分: 第一步: Resouce:首先我们需要获取beanDefinition的资源,我们将通过Spring的resource接口获得bean的资源,这一步也叫做bean资源的定位,下面是Spring内置的一些典型实现,当然,你也可以根据自己的需要实现自己的resource: ClassPathResourc

spring IOC

本节要点: IOC容器概述 IOC容器的工作原理 BeanFactory接口及常用实现类XmlBeanFactory ApplicationContext接口及常用实现类 BeanFactory和ApplicationContext的区别 1  IOC容器概述 Spring的IoC容器实现了控制反转,即在开发过程中,开发人员不需要关心容器是怎样的,也不需要调用容器的任何API.容器会自动进行被管理对象的初始化及对象之间依赖关系的维护. 在Spring中,最重要的是两个包,提供了IoC容器的基本功

Spring IOC理解

内容来自http://blog.csdn.net/qq_22654611/article/details/52606960 一.分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinnianshilongnian.iteye.com/blog/1413846 1.1.IoC是什么 Ioc-Inversion of Control,即"控制反转",不是什么技

谈谈对Spring IOC的理解(转)

学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家分享网上的一些技术大牛们对Spring框架的IOC的理解以及谈谈我对Spring Ioc的理解. 一.分享Iteye的开涛对Ioc的精彩讲解 首先要分享的是Iteye的开涛这位技术牛人对Spring框架的IOC的理解,写得非常通俗易懂,以下内容全部来自原文,原文地址:http://jinniansh

Spring学习(二)spring ioc注入的三种方式

一.spring ioc注入有哪三种方式: a setter 原理 : 在目标对象中,定义需要注入的依赖对象对应的属性和setter方法:"让ioc容器调用该setter方法",将ioc容器实例化的依赖对象通过setter注入给目标对象,封装在目标对象的属性中. b 构造器 原理 : 为目标对象提供一个构造方法,在构造方法中添加一个依赖对象对应的参数.ioc容器解析时,实例化目标对象时会自动调用构造方法,ioc只需要为构造器中的参数进行赋值:将ioc实例化的依赖对象作为构造器的参数传入

我讨厌注解式的Spring IOC

spring的ioc,原本是在"实例"层面上的.同样的一个类,我可以通过多个<bean>标签,得到多个实例.并且,每个bean中的属性配置都可以不一样,从而使我得到多个不一样的实例. 举个例子.我写过这样一个类: class A implements AI{ private B b; private C c; private D d; @Override public void aService(){ b.bService(); c.cService(); d.dServi

Java面试--Spring技术要点--Spring IOC

7  Spring IOC(依赖注入)的方式 Setter方法注入 构造器方法注入 工厂方法注入(实例工厂/静态工厂) 自动装配(需要开启配置,不建议使用) http://blessht.iteye.com/blog/1162131 8  IOC方式建议(构造器注入还是 Setter方法注入) 两种依赖方式都可以使用,构造器注入和Setter方法注入.最好的解决方案是用构造器参数实现强制依赖,setter方法实现可选依赖. 9  什么是Spring beans Springbeans是那些形成S