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 框架是一个从实际项目开发经验中抽取的,可高度重用的应用框架。它是一个轻量级容器,带有包装器,使许多不同的服务和框架更易于使用。轻量级容器接受任何 JavaBean,而...
浅谈Spring IoC容器的依赖注入原理 Spring IoC容器的依赖注入原理是Spring框架的核心机制之一,负责将服务对象(Bean)实例化并将其提供给客户端使用。依赖注入原理可以分为两个阶段:IoC容器初始化和Bean实例化。 ...
浅谈Spring IOC实例化Bean的三个方法 Spring IOC(Inversion of Control,控制反转)是Spring Framework中的一种核心机制,用于管理Bean的生命周期。实例化Bean是IOC的核心步骤之一,本文将详细讲解Spring IOC实例...
Quartz与Spring的集成使得我们可以充分利用Spring的IoC(Inversion of Control)和AOP(Aspect-Oriented Programming)特性来管理任务。这篇博文主要探讨了如何在Spring应用中配置和使用Quartz。 首先,我们需要...
这不仅锻炼了我们的编程技巧,也加深了对Spring的理解。 7. **总结** Spring的IOC功能强大且灵活,通过“myspring.rar”中的实践,我们可以更直观地感受这一特性。无论你是初学者还是经验丰富的开发者,深入理解...
"浅谈Spring单例Bean与单例模式的区别" 本文主要介绍了Spring单例Bean与单例模式的区别,通过对比两者的定义、实现机制和应用场景,帮助读者更好地理解这两种概念的异同。 一、单例模式的定义和实现 单例模式是一...
浅谈Spring解决jar包依赖的bom 本文主要介绍了浅谈Spring解决jar包依赖的bom,具有一定借鉴价值。下面我们将详细介绍Spring解决jar包依赖的bom的知识点: 一、什么是BOM? BOM(bill of materials):材料清单,...
1. singleton:单例模式,Spring IoC容器中只会存在一个共享的Bean实例,无论有多少个Bean引用它,始终指向同一对象。Singleton作用域是Spring中的缺省作用域。 2. prototype:原型模式,每次通过Spring容器获取...
在`web.xml`中,我们配置了一个`DispatcherServlet`,这个Servlet是Spring MVC的核心,它有自己的ApplicationContext,也就是子容器。`DispatcherServlet`的`init-param`配置项指定了Spring MVC的配置文件路径。当`...
当我们谈到“Spring工程的初始化模块与基础配置”时,我们通常指的是设置Spring IoC(Inversion of Control)容器,该容器负责管理对象的生命周期和依赖关系。在XML配置文件中,我们可以通过`...
6. **Spring的IoC容器**:`iBatis`的SqlSession和Mapper实例可以通过`Spring`的IoC容器管理,避免手动创建和关闭,减少资源泄漏的可能性。 7. **测试支持**:整合后的`iBatis`和`Spring`项目可以方便地进行单元测试...
浅谈Spring中的default-lazy-init参数和lazy-init 在Spring框架中,有两个重要的参数default-lazy-init和lazy-init,它们都是用于控制Bean实例化的时机的。下面我们将详细介绍这两个参数的作用和区别。 一、...
Guice是由Google大牛Bob lee开发的一款轻量级的java IoC容器。... 在我们谈到IOC框架,首先我们的话题将是构造,属性以及函数注入方式,Guice的实现只需要在构造函数,字段,或者注入函数上标注@I
Spring框架的核心特性之一是它的Inversion of Control (IOC) 容器,该容器负责管理和装配应用中的对象。本文将深入探讨Spring的两种配置容器:BeanFactory和ApplicationContext,以及它们的实现方式和应用场景。 ...
当我们谈到“Hibernate Spring整合”,就是将这两个强大的工具结合在一起,以实现更高效、更灵活的应用开发。 Hibernate是一个流行的ORM框架,它简化了Java应用与数据库之间的交互。通过Hibernate,开发者可以用...
Tomcat作为最常用的Java Web服务器,其性能优化和运行机制也是面试常谈: 1. **Tomcat架构**:介绍Catalina、 Coyote、Jasper等核心组件的功能。 2. **部署与启动**:如何配置server.xml,以及调整线程池参数以...
3. **初始化Spring容器**:创建并初始化Spring IoC容器,加载bean定义,实例化bean。 4. **初始化Web容器**(如果应用是Web应用):如果应用包含Web组件,则会启动嵌入式Servlet容器(如Tomcat)。 5. **启动监听器...
最后,Spring框架,以其依赖注入(IoC)和面向切面编程(AOP)闻名。IoC使得对象间的依赖关系可以通过配置文件或注解来管理,降低了代码的耦合度。AOP则是处理横切关注点,如日志、事务等,使代码更清晰。基础使用中...
所谓事实标准就是虽然 Java 官方没有说它就是开发标准,但是在当前 Java 开发的众多项目中,当我们谈到产品级的 Java 项目的时候,大多都是基于 Spring 或者应用了 Spring 特性的。 Spring 基于 IOC 和 AOP 两个...