spring3.0-AOP-基于@AspectJ切面的小例子

条件:

1.jdk的版本在5.0或者以上,否则无法使用注解技术

2.jar包:

  aspectjweaver-1.7.4.jar

  aspectjrt-1.7.4.jar

  spring-framework-bom-4.0.5.RELEASE-sources.jar

开始编写一个简单的基于@AspectJ的切面

//代理对象
public class testweaver {
    public void hello(){
        System.out.println("hello,world");
    }
}
@Aspect //通过注解的方式标示为切面
public class TestAnnotationAspect {//定义切点@Before和增强类型
    @Before("execution(* hello(..)))")
    public void doBefore(){
        System.out.println("前置通知");
    }
    //定义切点@After和增强类型
    @After("execution(* hello(..)))")
    public void doAfter(){
         System.out.println("最终通知");
    }
}
public class Test{
   public static void main(String[] args) {
              //创建对象
        AspectJProxyFactory a = new AspectJProxyFactory();
        testweaver t = new testweaver();
              //设置目标对象
        a.setTarget(t);
              //设置切面类
        a.addAspect(TestAnnotationAspect.class);
              //生成织入的代理对象
        testweaver t2 = a.getProxy();
        t2.hello();
    }
}

整个流程:

在这个例子中, testweaver类和TestAnnotationAspect类都只是一个简单的类,而TestAnnotationAspect类标注了@AspectJ的注解,

这让在后续的第三方程序能检测的到拥有@Aspect的类是否是一个切面类。

其次,TestAnnotationAspect类中的doBefore() 标注了@Before,意思为前置增强。后面的execution() 使用切点函数的方法匹配模式串注明了成员值。

而成员值为一个@Aspectj切点表达式,意思为在目标类的hello()上织入增强,可以带入任意的入参和任意的返回值。

最后通过org.springframework.aop.aspectj.annotation.AspectJProxyFactory 为 testweaver类生成切面代理。

时间: 2024-10-15 22:11:46

spring3.0-AOP-基于@AspectJ切面的小例子的相关文章

Spring3.0 AOP 详解

一.什么是 AOP. AOP(Aspect Orient Programming),也就是面向切面编程.可以这样理解,面向对象编程(OOP)是从静态角度考虑程序结构,面向切面编程(AOP)是从动态角度考虑程序运行过程. 二.AOP 的作用. 常常通过 AOP 来处理一些具有横切性质的系统性服务,如事物管理.安全检查.缓存.对象池管理等,AOP 已经成为一种非常常用的解决方案. 三.AOP 的实现原理. 如图:AOP 实际上是由目标类的代理类实现的.AOP 代理其实是由 AOP 框架动态生成的一个

Spring3.0 AOP 具体解释

一.什么是 AOP. AOP(Aspect Orient Programming),也就是面向切面编程.能够这样理解,面向对象编程(OOP)是从静态角度考虑程序结构,面向切面编程(AOP)是从动态角度考虑程序执行过程. 二.AOP 的作用. 经常通过 AOP 来处理一些具有横切性质的系统性服务,如事物管理.安全检查.缓存.对象池管理等,AOP 已经成为一种很经常使用的解决方式. 三.AOP 的实现原理. 如图:AOP 实际上是由目标类的代理类实现的.AOP 代理事实上是由 AOP 框架动态生成的

Spring3.0 AOP 详解 很不错

一.什么是 AOP. AOP(Aspect Orient Programming),也就是面向切面编程.可以这样理解,面向对象编程(OOP)是从静态角度考虑程序结构,面向切面编程(AOP)是从动态角度考虑程序运行过程. 二.AOP 的作用. 常常通过 AOP 来处理一些具有横切性质的系统性服务,如事物管理.安全检查.缓存.对象池管理等,AOP 已经成为一种非常常用的解决方案. 三.AOP 的实现原理. 如图:AOP 实际上是由目标类的代理类实现的.AOP 代理其实是由 AOP 框架动态生成的一个

spring aop ---基于AspectJ

因为自己在引用jar包上吃过很多亏,也浪费过很多时间,所以每次都会把使用到的jar包都标明,谢谢理解! 引用jar包: 1.运行类: @Service public class Fit { public String say(){ System.out.println("册数使用的数据!!!!"); // throw new RuntimeException("失败!!!"); return "你好啊!!!"; } } 2.切面类:该类需@Com

Spring 基于Aspectj切面表达式(6)

1 package com.proc; 2 3 import org.aspectj.lang.JoinPoint; 4 import org.aspectj.lang.ProceedingJoinPoint; 5 import org.aspectj.lang.annotation.After; 6 import org.aspectj.lang.annotation.AfterReturning; 7 import org.aspectj.lang.annotation.AfterThrow

Spring的AOP基于AspectJ的注解方式开发3

上上偏博客介绍了@Aspect,@Before 上篇博客介绍了spring的AOP开发的注解通知类型:@Before,@AfterThrowing,@After,@AfterReturning,@Around 也介绍了JoinPoint和ProceedingJoinPoint的区别 这篇博客讲@PointCut的使用,切入点注解----转载自https://www.cnblogs.com/ltfxy/p/9885742.html 这种方法便于维护管理 /** * 切面类:注解的切面类 */ @A

基于@AspectJ配置Spring AOP之一--转

原文地址:http://tech.it168.com/j/2007-08-30/200708302209432.shtml 概述 在低版本Spring中定义一个切面是比较麻烦的,需要实现特定的接口,并进行一些较为复杂的配置,低版本Spring AOP的配置是被批评最多的地方.Spring听取这方面的批评声音,并下决心彻底改变这一现状.在Spring2.0中,Spring AOP已经焕然一新,你可以使用@AspectJ注解非常容易的定义一个切面,不需要实现任何的接口. Spring2.0采用@As

Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较

本篇博文用一个稍复杂点的案例来对比一下基于XML配置与基于AspectJ注解配置的AOP编程的不同. 相关引入包等Spring  AOP编程准备,请参考小编的其他博文,这里不再赘述. 案例要求: 写一个简单的实现四则运算的计算器. 加入AOP功能:日志功能:检测参数中是否有负数的功能. 废话不多说了,直接上代码: (一)基于XML配置: 定义了一个接口类: package com.edu.aop; public interface ArithmeticCalculator { int add(i

[Spring框架]Spring AOP基础入门总结二:Spring基于AspectJ的AOP的开发.

前言: 在上一篇中: [Spring框架]Spring AOP基础入门总结一. 中 我们已经知道了一个Spring AOP程序是如何开发的, 在这里呢我们将基于AspectJ来进行AOP 的总结和学习. 一, AspectJ的概述: AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件. Spring为了简化自身的AOP的开发,将AspectJ拿过来作为Spring自身一个AOP的开发.