频道栏目
首页 > 资讯 > 其他 > 正文

SSM框架项目搭建系列(六)Spring AOP之基于XML的声明式AspectJ

16-11-03        来源:[db:作者]  
收藏   我要投稿

AOP通过“横切”技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,将其命名为Aspect,即切面。

切面就是将那些与业务无关(例如:权限认证、日志、事务处理),确为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。

实现AOP的技术分为两大类,一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;二是采用静态织入的方式,引入特定的语法创建切面。

join point(连接点):是程序执行中的一个精确执行点,例如类中的一个方法。 point cut(切入点):一个捕获连接点的结构。 advice(通知):是point cut的执行代码,实质性“切面”的具体逻辑。 aspect(切面):point cut和advice结合起来就是aspect,表示的是对象间横切的关系。 introduce(引入):为对象引入附加的方法或属性,从而达到修改对象结构的目的。 AOP Proxy(AOP代理):AOP框架创建的对象,这个对象通常可以作为目标对象的替代品,而AOP代理提供比目标对象更为强大的功能。 Target Object(目标对象):包含一个连接点的对象,也被称为代理对象。 Before Advice(前置通知):在某连接点(Join Point)之前执行的通知,但这个通知不能阻止连接点前的执行,ApplicationContext中在< aop:aspect >里面使用< aop:before >元素进行声明。 After Advice(后置通知):当某连接点退出的时候执行的通知。 After Return Advice(返回后通知):当某连接点退出的时候执行的通知,不包括抛出异常的情况。 Around Advice(环绕通知):包含一个连接点的通知,可以在方法调用前后完成自定义的行为。 After throwing advice(抛出异常后的通知):在方法抛出异常退出时执行的通知。

下面通过一个例子来说明AOP

dispatcher-servlet.xml web.xml用之前的,不用改,com.ssm下的包也不用管

applicationContext.xml




    
    
    
    

    
            
         
            
              
             
        
    

Person.java

package AOP;

/**
 * DateTime: 2016/11/2 21:35
 * 功能:
 * 思路:
 */
public class Person {

    public void eatBreakfast(){
        System.out.println("......eatBreakfast()早餐......");
    }

    public void eatLunch(){
        System.out.println("......eatLunch()午餐......");
    }

    public void eatSupper(){
        System.out.println("......eatSupper()晚餐......");
    }

}

AdivceMethod.java

package AOP;

import org.aspectj.lang.ProceedingJoinPoint;

/**
 * DateTime: 2016/11/2 21:40
 * 功能:
 * 思路:
 */
public class AdivceMethod {

    public void beforeEat(){
        System.out.println("...吃饭之前洗手...");
    }

    public void afterEat(){
        System.out.println("...吃饭之后洗碗...");
    }

    public Object aroundEat(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
        System.out.println("........吃饭前先逛一逛........");
        Object value = proceedingJoinPoint.proceed();
        System.out.println("........吃完后要睡觉了........");
        return value;
    }


}

AopTest.java

package AOP;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * DateTime: 2016/11/2 22:10
 * 功能:
 * 思路:
 */
public class AopTest {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        Person person= (Person) context.getBean("person");

        System.out.println();
        person.eatBreakfast();
        System.out.println();

        person.eatLunch();
        System.out.println();

        person.eatSupper();
        System.out.println();
    }
}

相关TAG标签
上一篇:POJ 3694 Network 割边
下一篇:NOIP 2015 子串 DP
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站