SpringAOP实例

Spring除了支持Schema方式配置AOP,还支持注解方式:使用@AspectJ风格的切面声明。

1  启用对@AspectJ的支持

Spring默认不支持@AspectJ风格的切面声明,为了支持需要使用如下配置:

<!-- 开启支持@AspectJ风格的切面声明 -->

<aop:aspectj-autoproxy/></span>

这样Spring就能发现@AspectJ风格的切面并且将切面应用到目标对象。

2  声明切面

@AspectJ风格的声明切面非常简单,使用@Aspect注解进行声明:

/定义切面
@Aspect()
public class LoggerAspect {  

    //定义切入点
    @Pointcut(value="execution(* zmx.spring.aop.test..*.*(..)) && args(param)", argNames = "param")
    public void beforePointcut(String param) {}  

    @Pointcut(value="execution(* zmx.spring.aop.test..*.*(..))")
    public void afterPointcut(){}  

    //定义通知  

    //前置日志通知
    @Before(value = "beforePointcut(param)", argNames = "param")
    public void beforeAdvice(String param) {
          System.out.println("===========before advice param:" + param);
    }   

    //后置日志通知
    @After(value = "afterPointcut()")
    public void afterAdvice() {
        System.out.println("===========after advice param");
    }  

}  

然后将该切面在配置文件中声明为Bean后,Spring就能自动识别并进行AOP方面的配置:

<!-- 切面 -->

<bean id="loggerAspect" class="zmx.spring.aop.test.LoggerAspect" />

3  声明切入点

@AspectJ风格的命名切入点使用org.aspectj.lang.annotation包下的@Pointcut+方法(方法必须是返回void类型)实现。

@Pointcut(value="切入点表达式", argNames = "参数名列表")

public void pointcutName(……) {}

value:指定切入点表达式;

argNames:指定命名切入点方法参数列表参数名字,可以有多个用“,”分隔,这些参数将传递给通知方法同名的参数,

同时比如切入点表达式“args(param)”将匹配参数类型为命名切入点方法同名参数指定的参数类型。

pointcutName:切入点名字,可以使用该名字进行引用该切入点表达式。

定义了一个切入点,名字为“beforePointcut”,该切入点将匹配目标方法的第一个参数类型为通知方法实现中参数名为“param”的参数类型。

4  声明通知

@AspectJ风格的声明通知也支持5种通知类型:

一、前置通知:使用org.aspectj.lang.annotation 包下的@Before注解声明;

@Before(value = "切入点表达式或命名切入点", argNames = "参数列表参数名")

value:指定切入点表达式或命名切入点;

argNames:与Schema方式配置中的同义。

时间: 2024-11-29 07:31:09

SpringAOP实例的相关文章

Ehcache学习(三)ehcache与springAOP拦截器实例

本次我们使用springAOP+ehcache结合来实现数据的缓存,我们可以 Cache 系统中 Service 或则 DAO 层的 get/find 等方法返回结果,如果数据更新( 使用Create/update/delete 方法), 则刷新 cache 中相应的内容. Aop中最常见的就是拦截器,那么我们首先需要创建的就是一个拦截器: ?  MethodCacheInterceptor <span style="font-family:Microsoft YaHei;font-siz

spring-aop的简单实例注解版

项目结构如图,基本的spring的配置就不在赘述 1.首先编写自定义的切面类 package org.wu.test; import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.s

SpringAOP的xml实例、注解形式实例、概念理解 以及execution表达式实例与概念说明

(1)Spring AOP的简单应用: -->AOP:(Aspect Orinted Programming)面向切面编程,用于具有横切逻辑的场合,如:访问控制,事务管理,性能检测,由切入点和增强处理组成. AOP主要核心是:在什么位置(pointcut:切入点)执行什么功能(advice:增强处理),AOP在Java里是利用反射机制实现, 关键词:-->Aspect(切面):一个模块化的横切逻辑,类似于 Java 中的类声明.-->Join Point(连接点):原程序执行过程中的某一

SpringAOP的应用实例与总结

一:AOP的背景 面试的时候面试官让我解释一下什么是AOP,当时不懂,在路上就查了,AOP:面向切面的编程技术,困惑了,JAVA是OOP:面向对象的编程技术.那么自己就立刻查了几个为题:1.什么是面向切面的编程技术:2.为什么要面向切面的编程技术:3.与OOP是什么关系? 首先解释第二个问题:在我们平时的开发过程中,你肯定会遇到下面几个面:1)权限校验:2)业务的核心代码:3)记录日志.那么在@Service层采用代码累加的方法,那么结构就会如下. @Service public class m

spring-AOP之通知和顾问

通知和顾问都是切面的实现形式,其中通知可以完成对目标对象方法简单的织入功能. 而顾问包装了通知,可以让我们对通知实现更加精细化的管理,让我们可以指定具体的切入点. 通知分为前置通知,环绕通知及后置通知. 前置通知:在目标方法执行之前执行,不改变方法的执行流程及执行结果,前置通知的实现类要实现"MethodBeforeAdvice"这个接口. 环绕通知:也叫方法拦截器,可以改变方法的执行流程及执行结果,环绕通知的实现类要实现"MethodInterceptor"这个接

利用maven构建一个spring mvc的helloworld实例

刚开始学习maven和spring mvc,学的云里雾里的 这里提供一个hello world实例,记录自己的学习之路 首先看maven官网的介绍 Apache Maven is a software project management and comprehension tool. Based on the concept of a project object model (POM), Maven can manage a project's build, reporting and do

[Spring] AOP, Aspect实例解析

最近要用到切面来统一处理日志记录,写了个小实例练了练手: 具体实现类: public interface PersonServer { public void save(String name); public void update(String name, Integer id); public String getPersonName(Integer id); } import org.springframework.stereotype.Component; @Component("pe

Spring-AOP实践

Spring-AOP实践 公司的项目有的页面超级慢,20s以上,不知道用户会不会疯掉,于是老大说这个页面要性能优化.于是,首先就要搞清楚究竟是哪一步耗时太多. 我采用spring aop来统计各个阶段的用时,其中计时器工具为StopWatch. 文章结构: 遇到的问题 创建项目 AOP-HelloWorld 时间统计 bug final 压力测试 源码 其中,遇到的问题: 1.少包aspectjweaver 添加依赖后才可以使用@Aspect 2.环绕通知加入多个point 刚开使用&&连

springmvc整合redis架构搭建实例

新换环境,又有新东西可以学习了,哈皮! 抽空学习之余看了一下redis,个人对Springmvc的爱是忠贞不渝,所以整理了一下Springmvc整合redis的环境搭建.分享学习. 第一步: 创建maven项目: 实例pom.xml内容如下 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns