`
hsyzijvaa
  • 浏览: 111775 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

(思考)Spring第一篇之IoC

    博客分类:
  • java
阅读更多
    (觉得自己一直思考太少且深度不够,所以加上这个前缀提醒自己-思维才是核心竞争力。)
spring目前可能用到的有几个模块:ioc、aop和tx,第一篇主要对ioc一些essential的知识做一个总结,不牵扯任何技术细节上的东东,很多都是个人的一些想法,所以不一定准确,欢迎大家指出来,可以一起讨论。附件是我在写文章时候,参考的一篇文献。
一、ioc(inversion of control)
1.什么是ioc?
以往不好的编程体验,过于依赖于implementation,这样的结果是:implementation对整个程序拥有了绝对的control。因为implementation都是硬编码,所以造成的结果是难于扩展,无法满足ocp。ioc就是inverse the control of implementations to the interfaces,即面向接口编程。这样无论是上层的business,还是下层的implementation都依赖抽象层(接口或者抽象类),抽象层拥有绝对的control。这样的结果是使整个项目有了更好的extensible。
spring框架的核心是ioc容器,所以它有着很好的no intrusive。
介绍到这,就很想知道ioc在spring中是如何实现的很自然的引出了第二个话题。
2.如何实现ioc?
实现ioc有两种主要的方式,一种是service locator(服务定位器),一种是dependecy injection(依赖注入)。为何要引入这两种方式,举一个简单的例子可以说明这个问题。
class people{    private action action;    public people(){        action =new manaction();    }}interface action{}class manaction implement action{}

注意,上例中你虽是面向接口编程,但实际上people类,既依赖于action接口,又依赖于manaction(具体的implementation),而且你在编译期就binding了这种关系。这显然不是我们所期望的那种“纯粹的”面向接口编程。如何达到这个要求,有人提出了“plugin”这个概念,既我们编写的plugin是在运行时才binding到这个系统中的,插入的时间和方式,完全于plugin的编写者无关,如何做到呢?于是就有了最开始所说的的两种实现方式(模式)。
首先说说di,di分为三种:type1,type2和type3。
type1:interface injection,要实现它,需要再定义一个接口叫actioninjection每个使用action的类都必须实现这个接口,然后在配置文件中定义injection属性,把manaction作为value传入进去即可。这种方式由于要在你自己的类(比如people)中实现actioninjection接口,于框架的耦合度较高,所以具有较强的intrusive,不推荐使用。而type2和type3,即是spring所使用的方式。网上有很多关于它们的讨论,我大致总结一下:type3使用构造子注入,优先使用,因为它具有较强的隐蔽性,可以保护你不愿意改变的属性;然而有时候,会有多个构造函数,或者是构造函数的参数很多(记住顺序很麻烦),就应该使用type2setter方法注入。
最后说说service locator(sl),我对它的理解应该也不准确,大概说说也算是抛砖引玉吧。di中控制者和被控制者,完全感受不到对方的存在,它们之间的关系是在runtime时才binding的,具有很强的灵活性,然而正是因为这种灵活性若是超过了一定限度,会使你迷失在查找配置文件的海洋中。而sl要求必须在编译器就有一个sl对象知道你application所需的全部服务,而具体这些服务的注册是通过di在runtime时和application所需要的sl对象binding在一起的,所以sl一般会是一个接口,而你的application在runtime中通过sl对象查找服务,然后调用它,这样的好处是,你可以显示的看到你所拥有的全部的服务,和配置文件解耦。
到这里,可以把ioc想象为一个实体东西,它的“体”是control,“相”是inverse,“用”呢?
3.用ioc干什么?
换个角度说,就是用ioc操作什么?答案是beans。操作的过程与spring框架紧密结合在一起,spring框架提供了两个方式一个是beanfactory接口,一个是使用application context容器,下面这段话解释的很清楚,不再赘述。
<div class="quote_title">引用
0
0
分享到:
评论

相关推荐

    spring中文教程

    Spring是IOC为核心的,所以第一步就是要深刻理解IOC,最好是能尽快把IOC作为教条式的原则,虽然有些偏激,但有助于尽快理解,在你有了深刻的理解之后,你再看Spring就已经有个大概框架了,虽然IOC从定义来讲并不...

    Spring技术内幕:深入解析Spring架构与设计原理(第1部分)

    Spring技术内幕 深入解析Spring架构与设计原理1(完整清晰版),一共两部分,这是第一部分 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自...

    Spring学习资料ppt

    Spring是IOC为核心的,所以第一步就是要深刻理解IOC,最好是能尽快把IOC作为教条式的原则,虽然有些偏激,但有助于尽快理解,在你有了深刻的理解之后,你再看Spring就已经有个大概框架了,虽然IOC从定义来讲并不...

    SPRING3技术内幕

    Spring技术内幕 深入解析Spring架构与设计原理1(完整清晰版),一共两部分,这是第一部分 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自...

    Spring技术内幕:深入解析Spring架构与设计原理(第2部分)

    国内第一本基于Spring3.0的著作,从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从木书中参透Spring框架的优秀架构和设计思想,而且还能从Spring优雅的实现源码...

    05-IoC入门案例-入门案例制作

    第一个问题,管理什么? 也就是我的Spring容器(也就是IoC容器,以下我们都称为Spring容器)要管的东西是什么?那肯定是对应的Bean。也就是你原来造对象的那些类,是不是我要管完以后把它放到我们的Spring容器中变成...

    Spring技术内幕:深入解析Spring架构与设计原理(第一部分)

    Spring技术内幕 深入解析Spring架构与设计原理1(完整清晰版),一共两部分,这是第一部分 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自...

    SPRING3技术内幕.z01

    Spring技术内幕 深入解析Spring架构与设计原理1(完整清晰版),一共两部分,这是第一部分 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自...

    Spring技术内幕

    , 国内第一本基于Spring3.0的著作,从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从木书中参透Spring框架的优秀架构和设计思想,而且还能从Spring优雅的实现源码...

    第24次课-1 Spring与Hibernate的整合

    第24次课-1 Spring与Hibernate的整合 本节主要内容 24.1 概述 24.2 管理SessionFactory 24.3 Spring对Hibernate的简化 24.1 概述 24.1.1 概述 Spring提供了很多IoC特性的支持,方便处理大部分典型的Hibernate整合...

    spring2-aop.pdf

    Spring框架是Java语言中最为流行的开源框架之一,其核心思想是提供一种全面、高效、简洁的编程和配置模型。Spring框架通过控制反转(IoC)和面向切面编程(AOP)技术,解决了传统Java应用开发中一些常见的问题,并且...

    基于SSM框架的Java Web开发课程教学中的几点思考.pdf

    - SSM框架学习内容的安排:在课程的第一阶段,主要学习Spring IoC(控制反转)、Spring AOP(面向切面编程)和Spring JDBC三个部分。通过文档和小项目的实践,帮助学生建立起对SSM框架的入门知识,并理解其核心思想...

    java软件开发——顶岗实习周记25篇.doc

    - **Spring**:一个轻量级的控制反转(IoC)容器和依赖注入框架,也是企业级Java开发的主流框架之一。 - **iBATIS**:类似于Hibernate,但提供了SQL查询的更大灵活性。 - **jQuery**:一个快速、简洁的JavaScript...

    Javaweb开发学习路线及Java三大框架分享?.docx

    在客户端,虽然 Java Applet 使用较少,但在服务器端,Java 的应用非常广泛,如 Servlet、JSP 以及各种第三方框架。这些技术极大地推动了 Web 领域的发展。 学习 Java Web 开发的路线可以分为以下几个阶段: 1. ...

    javase笔记javaSE的基本知识

    首先,了解基本的Java术语是学习Java的第一步。例如,`Struts`是一个用于构建MVC(模型-视图-控制器)架构的开源框架,它的最新版本是Struts2,能够简化Web开发。`JSP`(Java Server Pages)是一种动态网页技术,...

    Javaweb开发学习路线及Java三大框架分享?.pdf

    Spring 的重点在于理解 IOC(Inversion of Control)原理,它可以使用配置文件或注解替代手动创建对象,从而促进接口实现的分离。Hibernate 是一个持久化框架,可以考虑替换为 Mybatis,以更好地理解和实践数据库...

    《J2EE体系结构及程序设计》课程评价分析

    课程在大学三年级第一学期开设,考虑到学生已具备一定的Java语言和数据库基础知识。课程内容涵盖了Java EE应用的分层架构、开发环境的使用、数据库开发基础以及一系列核心技术,如Servlet、JSP、XML、Struts2、...

    基于SSM+Bootstrap的教务查询系统.zip

    是一个简单的教务查询系统,起初用于熟悉SSM的整合开发,使用技术 IOC容器:Spring Web框架:SpringMVC ORM框架:Mybatis 数据源:C3P0 日志:log4j 前端框架:Bootstrap 运行环境 … 毕业设计是高等教育阶段学生在...

    常见设计模式-单例模式

    懒汉式在第一次需要时才创建单例,节省了资源。但如果不加锁,多线程环境下可能导致多个实例的创建,线程不安全。如果使用synchronized关键字对创建单例的方法进行同步,虽然确保了线程安全,但会增加同步开销,...

Global site tag (gtag.js) - Google Analytics