Spring是J2EE开发中非常流行的框架,他最重要的两大基本功能是提供IoC容器和AOP概念的实现。这里介绍一下AOP,它的全名为Aspect-Oriented Programming,可翻译为面向层面编程。下面介绍一些AOP的基本术语和概念。

         1.Cross-cutting concern:我们编写的程序主要是为了实现业务逻辑,因此主要的代码是业务流程代码,但是出于需要会加入日志、安全检查、数据库事务等系统层面的代码。这些动作在AOP中被称为Cross-cutting concerns。这类代码被硬生生地横切(Cross-cutting)入业务代码中,使得程序逻辑更为复杂,增加了软件的维护成本。

         

          2.Aspect:将散落于各个业务逻辑中的Cross-cutting concerns收集起来,设计成各个独立可重用的对象,这些对象称为Aspect。例如将写日志动作设计为一个LogHandler类,LogHandler实现InvocationHandler接口,在invoke方法中调用业务方法之前或之后加入日志代码。这是一种代理模式,InvocationHandler接口是JDK的动态代理API中的一个接口。这个LogHandler类就是一个Aspect。事实上,在Spring中,开发者并不会需要设计一个这样的类,而是由Spring通过配置文件自动生成,因此它更多地存在于概念中。对应的注解为@Aspect 。

          3.Advice:Aspect中对于Cross-cutting concerns的具体实现称之为Advice。比如LogHandler类的invoke方法,就是一个Advice。Advice中包括了日志程序代码是如何实现的。

             invoke方法的代码大致如:

             public Object invoke (Object proxy, Method method, Object[] args) throws Throwable {

                       Object result = null;

                       try {

                                     logger.log("start: "+method);

                                     result = method.invoke(delegate, args);

                                     logger.log("end: "+method);

                       } catch (Expcetion e) {

 logger.log(e.toString());

                       }

          这三者的关系可概括为:从若干Cross-cutting concerns中辨识出Aspects,具体设计为Advices。在Spring中Advice一般会设计成单独的实现类。一般使用注解@After、@Beforre、@Around 来定义Advice 。

          4.Joinpoint:Advice在应用程序执行时加入业务流程的点或时机称之为Joinpoint,具体地说,就是Advice在应用程序中被执行的时机。Spring只支持方法的Joinpoint,可以在方法被执行之前或之后,或发生某个异常时执行。

          5.Pointcut:Pointcut定义了感兴趣的Jointpoint(也可以反过来说,符合Pointcut条件的每一个被拦截处即为连接点--Joinpoint),当调用的方法符合Pointcut表示式时,将Advice织入到程序中。在Spring中,通过配置文件或Annotation方式编写的Pointcut,当调用的方法符合配置文件中定义的Pointcut表示式时,将相应的Advice应用于程序。@After、@Beforre、@Around的参数的拦截规则就是Pointcut 。为了使Pointcut复用,可以使用@Pointcut专门定义拦截规则。

          6.Target:一个Advice被应用于的对象。

          7.Introductiuon:对于一个现存的类,Introduction可以为其增加行为,而不用修改该类的程序。

          8.Weave:Advice被应用至对象之上的过程称之为织入(Weave)。

         

        






Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐