SpringIOC到底是啥玩意儿,我在这里就不再赘述,网上可以找到好多版本来描述它。它到底有啥好,简单来说就是增强了程序的健壮性和可维护性,再简单点说就是不改变原有代码,实现新的逻辑(太夸张了吧,这也可以?是的,SpringIOC真就这么做到了,这也是为什么今年来Spring得到推崇的原因之一,当然还有SpringAOP、SpringMVC等等)。下面我将用最简单的例子阐述SpringIOC到底是如何做到这一点的。
首先我有这样一个需求就是,我有一个Chinese类,Chinese类有一个方法叫color(),他将显示中国人的肤色。具体代码如下:
1 public class Chinese{
2 public void color() {
3 System.out.println("肤色是黄色的");
4 }
5 }
然后我有一个Test类,具体代码如下:
1 public class Test {
2 public static void main(String[] args) {
3 Chinese chinese = new Chinese();
4 chinese.color();
5 }
6 }
很显然,最后控制台输出的是“肤色是黄色的”。
现在我想让中国人的肤色变成白色,即控制台最后输出“肤色是白色的”。很简单呀,改一下Chinese类的color方法就可以了。没错,这样是可以做的,但这样就破坏了程序的健壮性和可维护性,我们要不改动原来的代码就实现新的需求,这才叫牛逼!那怎么做呢,按照这样的类设计是无法办到的,这时我们想到面向接口的编程思想,我们定义一个Human接口,它有一个color方法显示肤色,但具体是什么肤色我们不知道,具体代码如下:
1 public interface Human {
2 public void color();
3 }
然后我们修改一下Chinese类,让它去实现Human接口:
1 public class Chinese implements Human{
2 @Override
3 public void color() {
4 System.out.println("肤色是黄色的");
5 }
6 }
当然我们的Test类也要修改:
1 public class Test {
2 public final static String CHINESE = "Chinese";
3 public static void main(String[] args) {
4 ApplicationContext ctx = new FileSystemXmlApplicationContext("src/bean.xml");
5 Human human = (Human) ctx.getBean(CHINESE);
6 human.color();
7 }
8 }
我们看到Chinese类的具体实例是从bean.xml中得到的:
1 <?xml version="1.0" encoding="UTF-8"?>
2 <beans xmlns="http://www.springframework.org/schema/beans"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://www.springframework.org/schema/beans
5 http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
6 <bean id="Chinese" class="com.andy.test.Chinese"/>
7 </beans>
这样Test类的测试结果也是在控制台打印“肤色是黄色的”。
好的,现在我们重新定义一个类Chinese2,同样去实现Human:
1 public class Chinese2 implements Human{
2 @Override
3 public void color() {
4 System.out.println("肤色是白色的");
5 }
6 }
不同的是我们现在的肤色是白色的。到此为止我们并没有改动任何原来的代码,只是新增了一个类Chinese2。
好,现在就是见证奇迹的时刻,我们将刚才bean.xml中的bean的class指向Chinese2,即:
<bean id="Chinese" class="com.andy.test.Chinese2"/>
我们并没有改动原来的代码哦,亲(^_^)。重新执行Test.java,你会神奇的发现控制台打印的是“肤色是白色的”。至此,你已经发现SpringIOC的无穷魅力,当然它也并非完美无缺,这种方式虽增强了代码的健壮性和可维护性,可因为它是利用java反射动态获取类实例,这样效率上会打点折扣,当然这点牺牲还是值得的,具体看你如何权衡。
完整源码可从我的googlecode svn下载:http://andy-dreamer.googlecode.com/svn/trunk/SpringIOC
个人网站:http://yeshanghai.ueuo.com/
分享到:
相关推荐
浅谈 Spring 原理 透析,ioc aop
主要介绍了浅谈Spring IoC容器的依赖注入原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
下面小编就为大家带来一篇浅谈springioc实例化bean的三个方法。小编觉得挺不错的,现在就想给大家,也给大家做个参考。一起跟随小编过来看看吧
主要介绍了浅谈spring ioc的注入方式及注入不同的数据类型,具有一定借鉴价值,需要的朋友可以参考下
手工撸一个springIOC框架,对于理解springIOC的原理有很大的帮组,特别是想学习spring框架的同学,特别是spring的启动原理。
1、Spring中自动装配的方式有哪些 3、springIOC原理是什么 4、谈一下autowired 和resource区别是什么 5、介绍一下bean的生命
在Step3到Step5的例子中,我们将利用Spring.net提供的Ioc框架,轻松完 成解耦以及系统改造等工作。 一、类之间的依赖 我们的第一个例子主要用于说明程序的基本构造,并且作为一个反面典型,引出为什么要解耦,以及...
Guice是由Google大牛Bob lee开发的一款轻量级的java IoC容器。... 在我们谈到IOC框架,首先我们的话题将是构造,属性以及函数注入方式,Guice的实现只需要在构造函数,字段,或者注入函数上标注@I
所谓事实标准就是虽然 Java 官方没有说它就是开发标准,但是在当前 Java 开发的众多项目中,当我们谈到产品级的 Java 项目的时候,大多都是基于 Spring 或者应用了 Spring 特性的。 Spring 基于 IOC 和 AOP 两个...
言归正传Spring+Struts+Hibernate是越来越少了Spring+SpringMVC+Mybatis的更多Spring,怎么都得用的,IOC,AOP,事务管理都太宝贝了。struts太重太繁琐,SpringMVC各方面,完胜,没接触过struts2,不评。Hibernate太...
面试技巧、职业规划、谈薪资 第七篇:Redis 缓存那点破事 !单线程、数据类型、淘汰机制、集群模式 第八篇:MySQL 那点破事!索引、SQL调优、事务、B+树、分库分表 第九篇:Mybatis 那点破事! ORM,动态SQL、动态...
1、JSP有哪几个内置对象? 2、Servlets的生命周期?...请谈一下AOP、IOC是如何应用的? 4、习惯哪个数据库,简述? 5、采用什么测试方法(是用工具测试?还是手动测试?)? 6、简答对Struts认识? ……
再譬如说,书中着力介绍的Spring、Hibernate、WebWork等都是时下流行的开源框架,IoC、AOP之类都是时下流行的概念词汇。而最大的看点就赫然摆在这本书的封面上:“without EJB”。我们曾经在无数的书籍和文章中看到...
本人人为电子文档编写“细腻而全面”的介绍了在MyEclipse工具下开发项目各个发面。 本书的 ...第十章重点介绍 Spring 的 IOC,AOP和整合Hibernate 的开发; 下过,看过后,你再回来顶一下我的资源吧。
Spring IOC + AOP, 面向对象 + 面向切面,完善的旅程。 把以前自己的小项目加入Struts、Spring、Hibernate的元素吧。 去研究各种商业项目的业务逻辑吧,才能在你的简历中加入浓重的一笔。 EJB3.0,java在走了...
也谈 ASP.NET 1.1 中 QueryString 的安全获取写法 ASP.NET运行模式:PageHandlerFactory 利用搜索引擎引用来高亮页面关键字 网站首页的自动语言切换 应用系统的多语言支持 (一) 应用系统的多语言支持 (二) 自动...