贯穿spring的核心理念

本文主要包含spring框架的整个理念。

1.IoC(反转控制)和依赖注入

2.面向方面编程

1.IoC(反转控制)和依赖注入

参考这篇文章:http://www.bccn.net/Article/kfyy/java/jszl/200610/4512.html

使用IoC,对象是被动的接受依赖类,而不是自己主动的去找。容器在实例化的时候主动将它的依赖类注入给它。可以这样理解:控制反转将类的主动权转移到接口上,依赖注入通过xml配置文件在类实例化时将其依赖类注入。

2.面向方面编程

2.1 eclipse中面向方面编程开发环境。

2.2 面向方面编程简介

2.3 一个简单的AOP demo

2.1 eclipse中面向方面编程开发环境

windows -> install new softwares -> add a new website ->输入下面的update site :http://download.eclipse.org/tools/ajdt/36/update -> 选择所有的选项。如图:

点击finish,安装完成之后,重启eclipse,然后新建一个java工程,应该出现下面的效果:

2.2 面向方面简介

在面向对象的编程中,主要是能够解决的是一个对相集合之间的关系,通过继承的策略实现代码的重复使用。但是也存在oo无法解决的问题,当要为没有类层次的对象引入公共行为的话,oo的思想是无法解决的,所以引入了面向方面编程。

面向方面关键概念:

join point:程序执行过程中某一点,advice就是相对于这个join point而言的。

advice : advice是join point的执行代码,都是方面的“执行的逻辑”。

pointcut:一组join point的总称,用于指示某个建议应用于何处。

introduction:为现有的java类添加字段或者是方法。

before advice :在调用join point之前调用before advice。

after advice:和before advice相反。

2.3简单的aop编程实例

2.3.1使用j2se的动态代理实现aop

客户端代码:

BusinessLogicCoreConcern.java

IBusinessLogic.java

LoggingProxyAspect.java

SecurityProxyAspect.java :

上面的代码使用的是java中的InvocationHandler实现的。简单的讲: Proxy类的设计用到代理模式的设计思想,Proxy类对象实现了代理目标的所有接口,并代替目标对象进行实际的操作。但这种替代不是一种简单的替代, 这样没有任何意义,代理的目的是在目标对象方法的基础上作增强,这种增强的本质通常就是对目标对象的方法进行拦截。所以,Proxy应该包括一个方法拦截 器,来指示当拦截到方法调用时作何种处理。InvocationHandler就是拦截器的接口。(http://blog.csdn.net/pizishuai2008/archive/2009/07/28/4385906.aspx)。

也就是当接口的实现类或者是接口调用接口中的函数的时候,java会自动调用invoke(InvocationHandler接口中的一个待实现的函数)函数。默认的情况下,调用接口中的任何一个函数,都会触发invoke函数被调用,但是可以在函数invoke中通过method的名称来做限制,就像上面的做法:

下面是一个简单的使用InvocationHandler实现的例子:

IAnimal.java :

Dog.java :

客户端程序:

2.3.2使用aspectj来实现上面的demo如下:

客户端程序:

SecurityAspect.java :  新增加一个aspect

代码如下:

TranscationAspect.java :

给整个工程添加aspectj属性:

运行整个工程,完成。

posted @ 2010-10-14 15:58  qiang.xu  阅读(646)  评论(0编辑  收藏  举报