SSH学习八 Spring框架 -- 控制反转实现Ioc

Spring的核心是控制反转IoC)和面向切面(AOP控制反转——Spring通过一种称作控制反转(IoC)的技术促进了低耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

(以上来自百度百科 http://baike.baidu.com/link?url=_egsZcZDKcHvLJtDqFTZIR3e6lH1G-pbWipYXgdFF65XNk2z452GCaelkKTcOgCo0WxJW8jfuEFumCNvd92d6naiuxRu50lF_YAE-KjSJ2y)

Spring为控制反转提供了更简单的方式,通过xml文件配置来实现。先谈相关知识:

(1)Bean

在Spring中,那些组成你应用程序的主体(backbone)及由Spring IoC容器所管理的对象,被称之为bean。 简单地讲,bean就是由Spring容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。
而bean定义以及bean相互间的依赖关系将通过配置元数据来描述。

每个bean对应类的一种构造方法,bean的基本格式如下:

1、dogtwo的bean,这个例子为了说明自定义的类作为成员的时候,怎么写bean。下面的owner是自己写的一个类

<bean id = "dogtwo" class="com.learn.vo.Dog">
		<constructor-arg name="age" value="22">
		</constructor-arg>
		<constructor-arg >
			<!-- 内部bean -->
			<bean id="owner" class="com.learn.vo.Owner"></bean>
		</constructor-arg>
		<!-- 如果是三个int类型的,那么可以按照type区分,按顺序排,也可以按照name区分 -->
	</bean>

2、dogset的bean,这个例子为了说明Date类型的处理,还有Ref

	<bean id="dogset" class="com.learn.vo.Dog">
		<property name="age" value="11"></property>
		<property name="i" value="2"></property>
		<property name="nm" >
			<value>'Tom'</value>
		</property>
		<property name="owener" ref="owner">

		</property>
		<property name="hiredate" >
			<bean class="java.util.Date"></bean>
		</property>
	</bean>
	<bean id="owner" class="com.learn.vo.Owner"></bean>

3、c的bean,这个例子是为了说明数组的bean怎么写

<bean id="c" class="com.learn.vo.Cat">
		<property name="lss">
			<list>
				<value>12345</value>
				<ref bean="sss"/>
			</list>
		</property>
	</bean>
	<bean id="sss" class="java.lang.String">
		<constructor-arg>
			<value>5678</value>
		</constructor-arg>
	</bean>

先解释各个标签的意义:

id: bean的名字,一个bean如果多个id,认为是别名。值得注意的是,为一个bean提供一个name并不是必须的,如果没有指定,那么容 器将为其生成一个惟一的name。对于不指定name属性的原因我们会在后面介绍(比如内部bean就不需要)。

class:   类的定义的路径

constructor arguments:  构造器,用于构造Bean也就是类的各个属性,name必须是类的对应域的名字,value是默认值,这个默认值在类中可以没有。

内部类:上面的例子上,owner是一个内部类,也就是自己定义的类,通过class写该类的定义的路径。另一种处理方法就是ref="id1"
 另外写一个id=id1的标签标示这个类,如dogset的bean的写法。

property: 和constructor一样,都是对属性的构造

name: 和id一样也是命名。 对bean进行定义时,除了使用id属性来指定名称 之外,为了提供多个名称,需要通过name属性来加以指定 。而所有的这些名称都指向同一个bean,在某些情况下提供别名非常有用,比如
为了让应用的每一个组件能更容易的对公共组件进行引用。

value: 默认值。可以再bean标签写,也可以按下面这样写,这也是String 的写法

	<bean id="sss" class="java.lang.String">
		<constructor-arg>
			<value>5678</value>
		</constructor-arg>
	</bean>

数组的bean写法

看前面的"c"的bean 的例子,加个<list>标签,然后数组里面有几个值就加几个<value>标签,也可以ref引用bean

测试的话是这样的:

	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("config/applicationContext-*.xml");
		Cat c = (Cat)context.getBean("c");
		c.show();
	}

上面的基本够用。对于多个值,一般都是用数组搞定。也可以多个属性,比如,如果是三个int类型的,那么可以按照type区分,按顺序排,也可以按照name区分

下面是完整代码:

本文的图片,.jpg改为.zip应该就可以了

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-17 20:44:31

SSH学习八 Spring框架 -- 控制反转实现Ioc的相关文章

Spring的控制反转(IOC)和依赖注入(DI)详解

首先介绍下(IOC)控制反转: 所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制器就有应用转移到了外部容器,控制权的转移就是反转 示例代码如下: public class PersonServiceBean{ private PersonDao personDao = new <strong><span style="color:#FF0000;">PersonDaoImpl</span></

Spring 框架学习—控制反转(IOC)

    Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson创建. 简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架,主要用于降低模块之间耦合度的框 架,实际上Spring除了能够通过IoC降低模块之间的耦合度外还提供了其它功能. 1.IoC的基础知识以及原理: IoC理论的背景:在采用面向对象方法设计的软件系统中,底层实现都是由N个对象组成的,所有的对象通过彼此的合作,最终 实现

spring三大核心学习(一)---控制反转

记得当年大学时候,java的企业级框架还是ssh的天下(spring,struts和hibernate),但是现在,感觉spring已经完全把那两个框架甩在后边了.用spring的人越来越多,用struts的人比原来少多了,用hibernate的就更少了.毕竟现在it人才流动性太大了,招人上来上手很重要,谁知道他什么时候就跑了..(hibernate太复杂了). 我最近只看spring,所以只说spring. 记得当初面试的时候被问到过spring的三大核心思想.相信多数javaer都被问到过这

【SSH进阶之路】一步步重构容器实现Spring框架——配置文件+反射实现IoC容器(十)

目录 [SSH进阶之路]一步步重构容器实现Spring框架--从一个简单的容器开始(八) [SSH进阶之路]一步步重构容器实现Spring框架--解决容器对组件的"侵入式"管理的两种方案--主动查找和控制反转(九) [SSH进阶之路]一步步重构容器实现Spring框架--配置文件+反射实现IoC容器(十) [SSH进阶之路]一步步重构容器实现Spring框架--彻底封装,实现简单灵活的Spring框架(十一)(未更新) 上上篇博文[SSH进阶之路]一步步重构容器实现Spring框架--

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

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

Spring理论基础-控制反转和依赖注入

序第一次了解到控制反转(Inversion of Control)这个概念,是在学习Spring框架的时候.IOC和AOP作为Spring的两大特征,自然是要去好好学学的.而依赖注入(Dependency Injection,简称DI)却使得我困惑了挺久,一直想不明白他们之间的联系.控制反转控制反转顾名思义,就是要去反转控制权,那么到底是哪些控制被反转了?在2004年 Martin fowler 大神就提出了 "哪些方面的控制被反转了?" 这个问题,他总结出是依赖对象的获得被反转了.在

Spring对于控制反转的误解

 原文的片段: 几位轻量级容器的作者曾骄傲地对我说:这些容器非常有用,因为它们实现了"控制反转".这样的说辞让我深感迷惑:控制反转是框架所共有的特征,如果仅仅因为使用了控制反转就认为这些轻量级容器与众不同,就好象在说"我的轿车是与众不同的,因为它有四个轮子". 问题的关键在于:它们反转了哪方面的控制?我第一次接触到的控制反转针对的是用户界面的主控权.早期的用户界面是完全由应用程序来控制的,你预先设计一系列命令,例如"输入姓名"."输

小菜学习设计模式(五)—控制反转(Ioc)

from:http://www.cnblogs.com/xishuai/p/3666276.html 本篇目录: 压水井 自来水厂 压水井的问题-依赖 压水井的问题解决-依赖倒置 自来水厂-Ioc 自来水厂运行-DI 后记 好长时间没有更新设计模式系列了,不是不想写,奈何小菜功力有限,这段时间也在给自己充电,毕竟路要一步一步走,急不得. 控制反转(Inversion of Control)是解决程序耦合问题的一种方案,还有种叫法是依赖注入(Dependency Injection),但我感觉Io

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

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