`
ada1230
  • 浏览: 37274 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

小鸟初学Spring IOC

阅读更多

冬眠(Hibernate)过后,春天(Spring)又来了!呵呵,JAVA开源世界就是这样生机勃勃。Spring这个框架够经典,我们来一起学习下。下面我们以新颖的对话方式来讲述Spring。一直很喜欢听赵传的“我是一只小小鸟”,初学者傻傻地,羽翼未丰,就简称“小鸟”吧,技术强人呢,牛气冲天,当然就叫“大牛”了。

一天,   小鸟在路上郁闷地唱着歌:“我是一只小小小小鸟,想学Spring却怎么也学不好……”,突然遇到刚发工资的大牛,欣喜若狂。

“牛哥,碰到你太好了,我们新项目要用Spring,看了几天书,可我还是没通。”

“呵呵,客气了不是,叫啥牛哥。牛顿姓牛,牛魔王也姓牛,你就叫我阿牛吧!”,大牛心情大好。

小鸟:“好的,牛哥。没问题,牛哥。”

大牛:“#¥%¥#¥%&”

小鸟:“牛哥,你说Spring咋就这么难学啊,莫非我跟它无缘?!”

大牛:“恩,非也。缘由心生,不管什么技术,你要先知道它的好处,对它产生强烈的兴趣,然后才会用心征服它。”

小鸟:“这个我明白,找女朋友就是这样的技术。”

大牛:“#¥%¥#¥%&”

“看了几天书,你自己如何理解Spring,觉得Spring又难在哪里呢?”大牛点上支烟,悠悠地问道。

“从概念上讲,Spring是一个轻量级的非侵入式的基于控制反转(IOC)和面向切面(AOP)的容器框架。轻量级嘛,是说它的体积和处理开销都小。非侵入式是说Spring应用中的对象不依赖于Spring的特定类。而且,Spring允许通过名称创建和检索对象,也可以管理对象的生命周期和对象之间的关系,所以它是个容器。它又提供了很多基础功能如事务管理、持久化框架集成等,将应用逻辑的开发留给我们,这就是典型的框架了。吼吼,我说的没错吧。”小鸟得意洋洋。

“恩,非常好,接着说。”大牛很满意。

“我了解的就差不多这些了。”小鸟黯然道。

“IOC,书上说叫控制反转,我差点被它弄反转了,还是不能理解。而AOP更是捉摸不透。”

“哈哈,其实IOC这个概念按照这个名字是很费解。”大牛摆出专业知识,“在Java开发中,IoC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制。这就是为什么它被称为控制反转。不过Martin Fowler大师给IoC起了一个更为直观的名字:依赖注入DI(Dependency Injection)。”

       “依赖注入?怎么理解?”小鸟还是很困惑。

       “小鸟啊,我问你个小问题,你感冒了要输液,是自己打针啊,还是请护士帮你打针。”大牛开始启发小鸟。

       “那肯定是让护士帮忙打针啊,自己打针容易打错地方,太麻烦。”,大牛开始点头,“哎,不过一般给我打针的护士都不好看,长的太IT了,下次……”小鸟似乎很有感触。

       “好了,回到正题。JAVA中A类的方法调用B类的方法(一般B类在A类中做属性),就说A依赖B,你以前要想调用A类中这样的方法,你会怎么做?”大牛认真道。

       “恩,我会在代码中先产生B类的实例,再用构造器或者set器把对象传给A。保证A类的实例在调用方法之前,B类属性是有值的。”小鸟不敢马虎。

       “非常好,但如果像这样的依赖关系很多,如A类还依赖C,D,E类,C类又依赖F,G类等。那你的工作量……”大牛打住。

       “太大太繁琐了!”小鸟自己吼道。

       “好啊,我们小鸟蛮有悟性嘛,都学会抢答了。我们再打个比方,如果你要寻找另一半……”大牛接道。

       “咿呀,有合适的吗,牛哥?你知道我品味高,我要小鸟依人型,不喜欢大鹏展翅型,我要她会洗衣服会做饭,会撒娇还会浪漫……”小鸟显得很兴奋。

       “扯淡。这样的女孩子让你自己去找,你找的到?”大牛望着一脸激动的小鸟,很是不屑。

       “但你想想,如果你爸妈都帮你找好了,那是多美地事啊!”大牛知道小鸟好这口,接着启发他。

       “哦,牛哥,我知道你意思了。你是说传统的方式就是我自己主动去寻找女孩,而IOC就是我被动地接受。我依赖的女孩,爸妈都帮我物色好直接给我。”小鸟恍然大悟。

       “对啊,说白了以前我们写代码就是自由恋爱,有了IOC,就成了包办婚姻了。”

       “哈哈,父母之命,媒妁之言。哎呀,牛哥,你这牛头啥构造,这你都想的出来。难怪Spring的口号是Do not call me, I will call you! 我彻底明白了。太妙了,我这就去写代码。”小鸟激动不已。一个小时后,小鸟拿出了成果。见代码:

男孩:

package com.softeem.spring.service;



public class Boy {

    private String name;

    private Girl girl;



    public void setName(String name) {

       this.name = name;

    }



    public void setGirl(Girl girl) {

       this.girl = girl;

    }



    /**

     * 寻找另一半

     */

    public void findAnother() {

       System.out.println(name + "找到了" + girl.getName());

    }

}

女孩:

package com.softeem.spring.service;



public class Girl {

    private String name;



    public Girl(String name) {

       this.name = name;

    }



    public String getName() {

       return "符合条件的老婆:" + name + "!";

    }



}

Spring.xml放在src(classpath)下

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

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN"

         "http://www.springframework.org/dtd/spring-beans-2.0.dtd">

<beans>

    <bean id="boy" class="com.softeem.spring.service.Boy">

       <property name="name"><!-- set方式注入依赖 -->

           <value>小鸟</value>

       </property>

       <property name="girl">

           <ref bean="girl" />

       </property>

    </bean>

    <bean id="girl" class="com.softeem.spring.service.Girl">

       <constructor-arg><!-- 构造器方式注入依赖 -->

           <value>晶晶</value>

       </constructor-arg>

    </bean>

</beans>

测试,记得将spring.jar包导入到工程

package com.softeem.spring.service;



import org.springframework.context.ApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;



public class TestService {



    public static void main(String[] args) {

       ApplicationContext context = new ClassPathXmlApplicationContext(

              "spring.xml");

       Boy boy = (Boy) context.getBean("boy");

       Boy.findAnother();

    }

}

   “牛哥,你看,我通过Spring中的配置文件配置Boy和Girl两个对象以及他们之间的关系,再用IOC容器去管理它们。这样我从容器中取得一个boy小鸟的时候,他所依赖的老婆晶晶就有了。哈哈,这要是真的就好了。”

    “恩,小鸟进步很快啊。”大牛大赞小鸟。

    “那你赶紧教我AOP吧,我都等不及了。”小鸟兴致勃勃。

    “口有点渴了,跟我买杯奶茶先。”大牛就是大牛。

    一阵旋风,奶茶到。

    “你先把IOC巩固好,接着把AOP预习一下,有了基础。我明天再教你AOP。”大牛接到老婆电话,命他火速回去洗碗。

    一阵旋风,大牛闪人。


来源:http://blog.csdn.net/lenotang/archive/2008/07/02/2606541.aspx
分享到:
评论

相关推荐

    spring ioc和aop原理流程图(详细)

    spring ioc容器初始化流程图 spring ioc容器依赖注入流程图 spring aop实现原理流程图

    springIOC手写框架分析

    springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC手写框架分析springIOC...

    spring ioc模块手写demo

    spring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demospring ioc模块手写demo...

    springIoc实现原理

    spring ioc指的是控制反转,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。交由Spring容器统一进行管理,从而实现松耦合

    SpringIoc示例代码

    SpringIoc示例代码,SpringIoc示例代码,SpringIoc示例代码,SpringIoc示例代码

    spring Ioc容器配置

    spring Ioc容器配置 IOC容器数据源配置 &lt;!-- 配置数据源 --&gt; destroy-method="close"&gt; &lt;value&gt;org.gjt.mm.mysql.Driver &lt;value&gt;jdbc:mysql://localhost:3306/demo &lt;value&gt;root ...

    spring ioc思维导图源文件

    spring ioc思维导图,让自己快速、详尽地了解spring ioc知识。

    以注解方式模拟Spring IoC AOP

    以注解方式模拟Spring IoC AOP,了解Spring是如何实现的.

    Spring ioc Spring ioc

    Spring ioc Spring ioc

    Springioc注入Demo

    详细讲解了springioc的各种注入方式以及对应的java方式。讲解了springioc和DI的区别,以及注入特殊复杂的属性

    Spring中IoC优点与缺点解析

    主要为大家详细解析了Spring中IoC优点与缺点,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    Spring IoC加载流程讲解

    Spring IoC加载流程讲解以及IoC思想和依赖倒置原则

    SpringIOC经典Demo

    SpringIOC经典Demo,绝对的经典.

    Spring Ioc 注解 依赖注入

    Spring Ioc 注解 依赖注入

    模拟spring ioc过程

    这是个模拟spring ioc的学习例子,是个java工程。有助于对aop和ioc的理解

    springioc的详细讲解

    spring的ioc容器详细讲解,理解springioc容器

    springioc加载流程图.pdf

    springioc加载流程图.pdf

    Spring IoC实现

    Spring IoC实现Spring IoC实现Spring IoC实现Spring IoC实现

    spring_ioc

    这是spring_ioc部分的内容。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...

    Spring IOC基础jar包

    Spring IOC基础jar包

Global site tag (gtag.js) - Google Analytics