【转】Spring的中IoC及AOP
1. Spring介绍
Spring是轻量级的J2EE应用程序框架。Spring的核心是个轻量级容器(container),实现了IoC(Inversion of Control)模式的容器,Spring的目标是实现一个全方位的整合框架,在Spring框架下实现多个子框架的组合,这些子框架之间彼此可以独立,也可以使用其它的框架方案加以替代,Spring希望提供一站式的框架整合方案 。
Spring不会特別去提出一些子框架来与现有的OpenSource框架竞争,除非它觉得所提出的框架够新够好,例如Spring有自己的 MVC框架方案,因为它觉得现有的MVC方案有很多可以改进的地方,但它不强迫您使用它提供的方案,您可以选用您所希望的框架来取代其子框架,例如您仍可以在Spring中整合您的Struts框架 。
Spring共有7个模块,分别为:核心容器、Spring 上下文、Spring AOP、Spring DAO、Spring ORM、Spring Web 模块、Spring MVC 框架,Spring是全面的和模块化的。Spring有分层的体系结构,这意味着你能选择使用它孤立的任何部分,它的架构仍然是内在稳定的。因此从你的学习中,你可得到最大的价值。例如,你可能选择仅仅使用Spring来简单化JDBC的使用,或用来管理所有的业务对象。 它的设计从底部帮助你编写易于测试的代码。Spring是用于测试驱动工程的理想的framework。
2. IoC/DI介绍
以下文字来自:http://www.blogjava.net/hh-lux/archive/2006/12/10/86757.html
首先想说说IoC(Inversion of Control,控制倒转)。这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。这是什么意思呢,举个简单的例子,我们是如何找女朋友的?常见的情况是,我们到处去看哪里有长得漂亮身材又好的mm,然后打听她们的兴趣爱好、qq号、电话号、ip号、iq号………,想办法认识她们,投其所好送其所要,然后嘿嘿……这个过程是复杂深奥的,我们必须自己设计和面对每个环节。传统的程序开发也是如此,在一个对象中,如果要使用另外的对象,就必须得到它(自己new一个,或者从JNDI中查询一个),使用完之后还要将对象销毁(比如Connection等),对象始终会和其他的接口或类藕合起来。
那么IoC是如何做的呢?有点像通过婚介找女朋友,在我和女朋友之间引入了一个第三者:婚姻介绍所。婚介管理了很多男男女女的资料,我可以向婚介提出一个列表,告诉它我想找个什么样的女朋友,比如长得像李嘉欣,身材像林熙雷,唱歌像周杰伦,速度像卡洛斯,技术像齐达内之类的,然后婚介就会按照我们的要求,提供一个mm,我们只需要去和她谈恋爱、结婚就行了。简单明了,如果婚介给我们的人选不符合要求,我们就会抛出异常。整个过程不再由我自己控制,而是有婚介这样一个类似容器的机构来控制。Spring所倡导的开发方式就是如此,所有的类都会在spring容器中登记,告诉spring你是个什么东西,你需要什么东西,然后spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其他需要你的东西。所有的类的创建、销毁都由 spring来控制,也就是说控制对象生存周期的不再是引用它的对象,而是spring。对于某个具体的对象而言,以前是它控制其他对象,现在是所有对象都被spring控制,所以这叫控制反转。如果你还不明白的话,我决定放弃。
IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了 spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖 Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢? Java 1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。
4. AOP介绍
5. 环境配置
spring的官网上不容易找到spring的zip包,从这里可以下载到:http://repo.spring.io/release/org/springframework/spring/ 。另外,spring需要一些依赖包,但这些依赖包没有打包在spring的zip中,需要自己下载。包括使用IoC功能时所需要的commons-logging.jar,使用AOP功能时所需要的aopalliance.jar,aspectj-1.7.4.jar,aspectjrt.jar,aspectjweaver.jar。这些自己在网上找一下,加到用户库里就可以了。
新建一个web工程。file->new->web project,给工程取名为Spring_Test。将下载到的spring包中的.jar文件复制到Spring_Test/WebRoot/WEB-INF/lib下。功能每个jar包都有一个doc.jar和src.jar,这两种包可以等需要的看doc和源代码的时候再加入。
6. 入门示例
最新文章
- 【BZOJ-2730】矿场搭建 Tarjan 双连通分量
- css div上下左右居中
- form表单及其中元素
- 变废为宝,将Discuz废弃的cache机制引入到memory体系中
- Linux命令:cat命令详解
- WordPress nginx环境下开启多站点
- UltraEdit的语法高亮显示配置
- gc学习(转)
- 蓝桥网试题 java 基础练习 分解质因数
- 初识Java网络编程
- 【mongodb系统学习之一】mongodb的简单安装
- 【资料总结】| Deep Reinforcement Learning 深度强化学习
- BGP: 容易实现路由备份,不容易实现等价负载均衡。
- Python-Django-BBS
- 使用 wordcloud 构建词云图
- hTML 如何在不同页面上传递参数( 1 )
- office远程代码执行(CVE-2017-11882)
- Oracle 11g 发行版2的安装,PLSQL_Developer安装 , Oracle数据库安装失败,完全卸载,常用的命令
- zookeeper(1)初识zookeeper
- log4j生成有日期的日志文件名
热门文章
- HDU 5820 Lights (2016多校7L,主席树)
- 洛谷P3916 图的遍历 [图论,搜索]
- 【枚举】【最小表示法】XVII Open Cup named after E.V. Pankratiev Stage 14, Grand Prix of Tatarstan, Sunday, April 2, 2017 Problem F. Matrix Game
- 【计算几何】【极角排序】Gym - 101174B - Bribing Eve
- 【数论】【中国剩余定理】【LCM】hdu1788 Chinese remainder theorem again
- 【期望DP+高斯消元】BZOJ3270-博物馆
- [PKUSC2018]真实排名
- 通过win下的eclipse连接虚拟机中伪分布的hadoop进行调试
- Java学习笔记(12)
- MySql数据库理解