- 浏览: 111721 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (134)
- java (134)
- [转]sqlserver 数据类型 及使用考虑 (1)
- 保存、读取、删除到sdcard图片 (1)
- hashcode 重写 (1)
- sql2008导出数据 (1)
- Android开发(1):随机绘制彩色实心圆 (1)
- JPA 应用技巧 1:实体类和实体 DAO 模板 (1)
- 狩魂之神即将开测 - 2012年最值得期待的网页游戏 (1)
- mantis (1)
- MediaWiki (1)
- ExtMail (1)
- MDaemon搭建公司项目环境 (1)
- NIO 之 选择就绪模式 (1)
- web应用系统架构设计 (1)
- XML CDATA (1)
- firefox+Firebug调试JavaScript、HTML和CSS (1)
- 在SUSE 11中安装Windows虚拟机 (1)
- 将字节流(byte[])转换成文件 (1)
- HTML5网站 (1)
- 在Android中自定义IOS风格的按钮 (1)
- 基于SVG的WebGIS的一个雏形 (1)
- 程序名称DreamIT(梦想IT)提供许多IT公司的面试和笔试试题 (1)
- 介绍一个ASP.NET开发工具Web Matrix (1)
- C#信息采集工具实现 (1)
- Qt 4.7.4 完美动态编译发布动态调试,以及静态编译发布 (1)
- 2011面试题目之猴子偷桃 (1)
- Linux tar压缩时排除某个目录或文件的参数 (1)
- Crack JRebel 4.0,无需重启JVM,热部署解决方案 (1)
- Groovy Sql使用Spring的事务管理 (1)
- <<让oracle跑的更快1>>读书笔记2 (1)
- 不要再浪费时间 (1)
- JSP (1)
- PHP (1)
- Python (1)
- Ruby (1)
- Perl概要及各自特点 (1)
- JVM 内存结构(转) (1)
- [转载]JPA 批注参考(1) (1)
- Hadoop配置部分内容 (1)
- HD2刷机的基础知识 HD2的radio、HSPL、ROM三种组合 (1)
最新评论
-
alexyao8:
顶起
[G4Studio开源平台]如何搭建G4开发环境 -
greatghoul:
太二了。
不要再浪费时间 -
wengbo316:
它们一定是花果山的猴子,数数能数到3K多呢。。。
2011面试题目之猴子偷桃 -
mycar:
额.待补充...........
保存、读取、删除到sdcard图片 -
沙舟狼客:
这太折磨人了, 还有人要看吗?
[] javaeye rss抓取
(觉得自己一直思考太少且深度不够,所以加上这个前缀提醒自己-思维才是核心竞争力。)
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(依赖注入)。为何要引入这两种方式,举一个简单的例子可以说明这个问题。
注意,上例中你虽是面向接口编程,但实际上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">引用
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">引用
发表评论
-
HD2刷机的基础知识 HD2的radio、HSPL、ROM三种组合
2012-02-07 15:13 1100今天看着教程刚刷了台HD2,觉得有用的文章顺便转载过来 ... -
Hadoop配置部分内容
2012-02-04 15:29 741[size=medium;]Hadoop配置部分内容[ ... -
[转载]JPA 批注参考(1)
2012-02-04 11:39 725作为 Java 企业版 5 ... -
JVM 内存结构(转)
2012-02-03 14:49 899http://www.4ucode.com/Study ... -
JSP,PHP,Python,Ruby,Perl概要及各自特点
2012-01-31 15:18 994互联网技术日新月异,编程的语言层出不穷,原本稍微平静了 ... -
不要再浪费时间
2012-01-31 15:08 910不要再浪费时间 &l ... -
<<让oracle跑的更快1>>读书笔记2
2012-01-11 13:24 10231 绑定变量 1 ... -
Groovy Sql使用Spring的事务管理
2011-12-28 18:43 1287Grails如果不想用Hibernate的东东,可以直 ... -
Crack JRebel 4.0,无需重启JVM,热部署解决方案
2011-12-28 18:28 1170http://dl.dropbox.com/u/229 ... -
Linux tar压缩时排除某个目录或文件的参数
2011-12-21 13:48 1303在对某个目录进行压缩的时候,有时候想排除掉某个目录,例 ... -
2011面试题目之猴子偷桃
2011-12-21 11:14 1508<span style="" ... -
Qt 4.7.4 完美动态编译发布动态调试,以及静态编译发布
2011-12-20 14:53 1602首先是准备工作 ... -
C#信息采集工具实现
2011-12-20 12:34 918简单C#信息采集工具实现 最近想整只爬虫玩玩,顺便熟 ... -
介绍一个ASP.NET开发工具Web Matrix
2011-12-19 09:49 966想学习或者开发个小型的ASP.NET程序,装个VS.N ... -
程序名称DreamIT(梦想IT)提供许多IT公司的面试和笔试试题
2011-12-19 09:24 916<font style="bac ... -
基于SVG的WebGIS的一个雏形
2011-12-14 13:19 679我和一位师弟,经过了很多天的努力,终于做出了一个简单的 ... -
在Android中自定义IOS风格的按钮
2011-12-12 10:09 1095<p class="MsoNorm ... -
HTML5网站
2011-12-12 08:55 808记得刚来现在公司的时候,老大就说,作为移动平台部门的员 ... -
将字节流(byte[])转换成文件
2011-12-09 08:25 1522/** * 将字节流转换成文件 * @par ... -
在SUSE 11中安装Windows虚拟机
2011-12-09 01:29 898Novell公司最近推出 ...
相关推荐
Spring是IOC为核心的,所以第一步就是要深刻理解IOC,最好是能尽快把IOC作为教条式的原则,虽然有些偏激,但有助于尽快理解,在你有了深刻的理解之后,你再看Spring就已经有个大概框架了,虽然IOC从定义来讲并不...
Spring技术内幕 深入解析Spring架构与设计原理1(完整清晰版),一共两部分,这是第一部分 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自...
Spring是IOC为核心的,所以第一步就是要深刻理解IOC,最好是能尽快把IOC作为教条式的原则,虽然有些偏激,但有助于尽快理解,在你有了深刻的理解之后,你再看Spring就已经有个大概框架了,虽然IOC从定义来讲并不...
Spring技术内幕 深入解析Spring架构与设计原理1(完整清晰版),一共两部分,这是第一部分 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自...
国内第一本基于Spring3.0的著作,从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从木书中参透Spring框架的优秀架构和设计思想,而且还能从Spring优雅的实现源码...
第一个问题,管理什么? 也就是我的Spring容器(也就是IoC容器,以下我们都称为Spring容器)要管的东西是什么?那肯定是对应的Bean。也就是你原来造对象的那些类,是不是我要管完以后把它放到我们的Spring容器中变成...
Spring技术内幕 深入解析Spring架构与设计原理1(完整清晰版),一共两部分,这是第一部分 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自...
Spring技术内幕 深入解析Spring架构与设计原理1(完整清晰版),一共两部分,这是第一部分 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自...
, 国内第一本基于Spring3.0的著作,从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从木书中参透Spring框架的优秀架构和设计思想,而且还能从Spring优雅的实现源码...
第24次课-1 Spring与Hibernate的整合 本节主要内容 24.1 概述 24.2 管理SessionFactory 24.3 Spring对Hibernate的简化 24.1 概述 24.1.1 概述 Spring提供了很多IoC特性的支持,方便处理大部分典型的Hibernate整合...
Spring框架是Java语言中最为流行的开源框架之一,其核心思想是提供一种全面、高效、简洁的编程和配置模型。Spring框架通过控制反转(IoC)和面向切面编程(AOP)技术,解决了传统Java应用开发中一些常见的问题,并且...
- SSM框架学习内容的安排:在课程的第一阶段,主要学习Spring IoC(控制反转)、Spring AOP(面向切面编程)和Spring JDBC三个部分。通过文档和小项目的实践,帮助学生建立起对SSM框架的入门知识,并理解其核心思想...
- **Spring**:一个轻量级的控制反转(IoC)容器和依赖注入框架,也是企业级Java开发的主流框架之一。 - **iBATIS**:类似于Hibernate,但提供了SQL查询的更大灵活性。 - **jQuery**:一个快速、简洁的JavaScript...
在客户端,虽然 Java Applet 使用较少,但在服务器端,Java 的应用非常广泛,如 Servlet、JSP 以及各种第三方框架。这些技术极大地推动了 Web 领域的发展。 学习 Java Web 开发的路线可以分为以下几个阶段: 1. ...
首先,了解基本的Java术语是学习Java的第一步。例如,`Struts`是一个用于构建MVC(模型-视图-控制器)架构的开源框架,它的最新版本是Struts2,能够简化Web开发。`JSP`(Java Server Pages)是一种动态网页技术,...
Spring 的重点在于理解 IOC(Inversion of Control)原理,它可以使用配置文件或注解替代手动创建对象,从而促进接口实现的分离。Hibernate 是一个持久化框架,可以考虑替换为 Mybatis,以更好地理解和实践数据库...
课程在大学三年级第一学期开设,考虑到学生已具备一定的Java语言和数据库基础知识。课程内容涵盖了Java EE应用的分层架构、开发环境的使用、数据库开发基础以及一系列核心技术,如Servlet、JSP、XML、Struts2、...
是一个简单的教务查询系统,起初用于熟悉SSM的整合开发,使用技术 IOC容器:Spring Web框架:SpringMVC ORM框架:Mybatis 数据源:C3P0 日志:log4j 前端框架:Bootstrap 运行环境 … 毕业设计是高等教育阶段学生在...
懒汉式在第一次需要时才创建单例,节省了资源。但如果不加锁,多线程环境下可能导致多个实例的创建,线程不安全。如果使用synchronized关键字对创建单例的方法进行同步,虽然确保了线程安全,但会增加同步开销,...