您的位置:首页 > 编程语言 > Java开发

Spring两大特色IoC和AOP

2012-07-27 00:08 134 查看
       学习某个框架,应该首先了解一下这个框架的相关基础概念,它的具体含义是什么。其次要弄明白为什么要学它,学它有什么用,它能给我们的开发带来什么好处。最后要弄清楚这个框架的特色功能是什么,最好能对它的原理了解并掌握。       
       框架很多我们想把所有的知识都学会了可能难度太大,很多时候我们学了一个框架可能就知道自己在工程里用过的某个功能而已,对于这个框架的其它功能也许我们并不是很了解。其实我们也完全没有必要都去学,掌握重点即可,有些不常用的功能如果用到了再去看看帮助文档也不晚。

       Spring常用的两大特色功能应该就是AOP和IoC容器了,下面我们就来看看它们究竟是什么:

       Spring的IoC(Inversion of Control):就是常说的“控制反转”,也又叫依赖注入的(DI)。第一次听见这词的话感觉挺深奥的是不是,其实原理很简单,可以这样理解,一般情况下在A类调用B类,必须先在A类实例化B类对象。而使用了Spring的IoC容器之后,可以通过它的配置文件(applicationContext.xml),向A类注入B类的对象,这样在A类中就不需要实例化B类对象而是可以直接使用,这样做的好处是降低了层与层之间的耦合度。也有人用一句话来概括“就是用XML来定义生成的对象”。也可以将IoC理解为一种设计模式,而Spring只是实现了这种设计模式。

       可以把IoC看作是一个大工厂,只不过这个大工厂要生成的对象都是在XML文件中给出定义的,然后利用Java的“反射机制”编程,根据XML中给出的类名生成相应的对象。这样看来,IoC是把以前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是将工厂和对象生成这两者独立分割开来,这样做的好处就是为了提高灵活性和可维护性。

       IoC最大的好处就是把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变得很简单(说的是基于接口的编程),只需要修改XML就可以了,这样我们不用重新编译即可运行,甚至可以实现对象的热插拔。

由于对象的生成使用了反射编程,所以也给它带来了影响效率的缺点,但是相对于它能提高可维护性和灵活性,这点损耗也就不算什么了,除非对效率要求特别高。所以是否使用它,还得看具体情况而定。

       Spring的AOP(Aspect-oriented programming):面向切面编程,也有叫面向方面编程的。我们都知道OOP(面向对象编程)是针对业务处理过程的实体及其属性和行为进行抽象封装,以或得更加清晰高效的逻辑单元划分。而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果,这两种设计思想在目标上有着本质的差异,但它们之间并不冲突,完全可以在一个应用系统同时存在。

       AOP的几个核心概念:

           1、  Aspect:切面,是对交叉业务逻辑的统称。

           2、 Joinpoint:连接点,指切面可以织入到目标对象的位置(方法,属性等)。

           3、 Advice:通知,指切面的具体实现

           4、 Pointcut:切入点,指通知应用到哪些方法或属性之上的规则。

           5、 Introduction:引入,指动态地给一个对象增加方法或属性的一种特殊的通知。

           6、 Weaving:织入,指将通知插入到目标对象,Spring支持的是动态织入。

           7、Target:目标对象,指需要织入切面的对象。

           8、 Proxy:代理对象,指切面织入目标对象之后形成的对象

      SpringAOP原理:采用动态代理模式,其过程为:

          1、 将切面使用动态代理的方式动态织入到目标对象(被代理类),形成一个代理对象。

          2、 默认情况下,会使用目标对象的接口来生成代理对象(JDK的动态代理),目标对象如果没有实现代理接    口,那么Spring会采用CGLib来生成代理对象,该代理对象是目标对象的子类。

          3、 目标对象如果是final类,并且也没有实现代理接口,就不能运用AOP。

      理论上的理解有助于指导我们实践的过程,想要真正理解这些概念和原理还得自己亲手去实现代码,遇到问题并解决了,我们的理解也就更加深刻了。这也就是所谓的理论指导实践,实践得出理论。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息