Spring3.0中的AOP配置方法
http://zywang.iteye.com/blog/974226
http://www.cnblogs.com/garinzhang/p/java_spring_aop_aspect.html
第一种配置方法:使用@AspectJ标签
- 在配置文件中添加<aop:aspectj-autoproxy/>注解
- 创建一个Java文件,使用@Aspect注解修饰该类
- 创建一个方法,使用@Before、@After、@Around等进行修饰,在注解中写上切入点的表达式
说明:上述Java文件创建好后,需要将其在Spring的容器中进行声明,可以在配置文件中定义<bean/>节点,也可以使用@Component组件进行修饰
示例:
1 import org.aspectj.lang.ProceedingJoinPoint;
2 import org.aspectj.lang.annotation.After;
3 import org.aspectj.lang.annotation.AfterThrowing;
4 import org.aspectj.lang.annotation.Around;
5 import org.aspectj.lang.annotation.Aspect;
6 import org.aspectj.lang.annotation.Before;
7 import org.springframework.stereotype.Component;
8
9 /**
10 * 基于注解的AOP日志示例
11 * @author ZYWANG 2011-3-24
12 */
13 @Component
14 @Aspect
15 public class AopLog {
16
17 //方法执行前调用
18 @Before("execution (* com.zywang.services.impl.*.*(..))")
19 public void before() {
20 System.out.println("before");
21 }
22
23 //方法执行后调用
24 @After("execution (* com.zywang.services.impl.*.*(..))")
25 public void after() {
26 System.out.println("after");
27 }
28
29 //方法执行的前后调用
30 @Around("execution (* com.zywang.services.impl.*.*(..))")
31 public Object around(ProceedingJoinPoint point) throws Throwable{
32 System.out.println("begin around");
33 Object object = point.proceed();
34 System.out.println("end around");
35 return object;
36 }
37
38 //方法运行出现异常时调用
39 @AfterThrowing(pointcut = "execution (* com.zywang.services.impl.*.*(..))",throwing = "ex")
40 public void afterThrowing(Exception ex){
41 System.out.println("afterThrowing");
42 System.out.println(ex);
43 }
44 }
上面这段代码中多次使用了重复的切入点,这种情况下,可以使用@Pointcut标注,来修改一个切入点方法(这个方法不需要参数和方法体),然后就可以在@Before等标注中引用该方法作为切入点,示例如下:
1 import org.aspectj.lang.ProceedingJoinPoint;
2 import org.aspectj.lang.annotation.Around;
3 import org.aspectj.lang.annotation.Aspect;
4 import org.aspectj.lang.annotation.Before;
5 import org.aspectj.lang.annotation.Pointcut;
6 import org.springframework.stereotype.Component;
7
8 /**
9 * 基于注解的AOP日志示例
10 * @author ZYWANG 2011-3-24
11 */
12 @Component
13 @Aspect
14 public class AopLog {
15
16 @Pointcut("execution (* com.iflysse.school.services.impl.*.*(..))")
17 public void pointcut(){}
18
19 //方法执行前调用
20 @Before("pointcut()")
21 public void before() {
22 System.out.println("before");
23 }
24
25 //方法执行的前后调用
26 @Around("pointcut()")
27 public Object around(ProceedingJoinPoint point) throws Throwable{
28 System.out.println("begin around");
29 Object object = point.proceed();
30 System.out.println("end around");
31 return object;
32 }
33 }
第二种配置方法:基于配置文件的配置
- 创建一个Java文件,并指定一个用于执行拦截的方法,该方法可以有0个或多个参数
- 在Spring配置文件中注册该Java类为一个Bean
- 使用<aop:config/>、<aop:aspect/>等标签进行配置
示例:
Java文件
1 import org.aspectj.lang.ProceedingJoinPoint;
2
3 /**
4 * 基于配置文件的AOP日志示例
5 * @author ZYWANG 2011-3-24
6 */
7 public class AopLog {
8
9 //方法执行的前后调用
10 public Object runOnAround(ProceedingJoinPoint point) throws Throwable{
11 System.out.println("begin around");
12 Object object = point.proceed();
13 System.out.println("end around");
14 return object;
15 }
16
17 }
使用第二种方式的AOP配置,在Eclipse(有SpringIDE插件)中被拦截到的方法中有标识显示
以上配置基于Spring 3.0.5 进行设置,参考其《Reference Documentation》
Spring3.0中的AOP配置方法的更多相关文章
- WCF学习之旅—WCF4.0中的简化配置功能(十五)
六 WCF4.0中的简化配置功能 WCF4.0为了简化服务配置,提供了默认的终结点.绑定和服务行为.也就是说,在开发WCF服务程序的时候,即使我们不提供显示的 服务终结点,WCF框架也能为我们的服务提 ...
- AntiXSS v4.0中Sanitizer.GetSafeHtmlFragment等方法将部分汉字编码为乱码的解决方案
AntiXSS v4.0中Sanitizer.GetSafeHtmlFragment等方法将部分汉字编码为乱码的解决方案 以下代码为asp.net环境下,c#语言编写的解决方案.数据用Dictiona ...
- CentOS-7.0.中安装与配置Tomcat-7的方法
安装说明 安装环境:CentOS-7.0.1406安装方式:源码安装 软件:apache-tomcat-7.0.29.tar.gz 下载地址:http://tomcat.apache.org/down ...
- spring3.0.5的aop使用
spring3.0.5开始支持jpa2.0了,但是最近笔者在使用他的的时候发现了3.0.5的包与2.5.5相比,有所精简.其他外部的包,我们需要自己下载. AOP必须的spring包 org.spri ...
- django 2.0 中URL的include方法使用分析
一.问题出现: 在使用Django2.0,配置全局URL时,希望指向某个APP的URL,配置如下: from django.contrib import admin from django.conf. ...
- AFNetworking 3.0中调用[AFHTTPSessionManager manager]方法导致内存泄漏的解决办法
在使用AFNetworking3.0框架,使用Instruments检查Leaks时,检测到1000多个内存泄漏的地方,定位到 [AFHTTPSessionManager manager] 语句中,几 ...
- Vue2.0中的路由配置
Vue2.0较Vue1.0,路由有了较大改变.看一下Vue2.0中的路由如何配置: 步骤一: 在main.js文件中引入相关模块以及组件及实例化vue对象配置选项路由及渲染App组件 默认设置如下: ...
- vue3.0中的双向数据绑定方法
熟悉vue的人都知道在vue2.x之前都是使用object.defineProperty来实现双向数据绑定的 而在vue3.0中这个方法被取代了 1. 为什么要替换Object.definePrope ...
- VS2015ASP.NET MVC5项目中Spring.NET配置方法(超详细)
首先,在ASP.NET MVC5项目右键,如下图所示,选择“管理Nuget程序包...” 然后,在弹出的页面的搜索框中输入“spring.web”,在返回结果中选择Spring.Web和Spring. ...
- Spring3数据源的6种配置方法
在Spring3中,配置DataSource的方法有五种. 第一种:beans.xml <bean id="dataSource" class="org.apach ...
随机推荐
- python打包方法
在Python中,要编写setup.py文件,用于构建和打包你的Python项目,你可以遵循以下步骤: 创建项目目录结构:首先,你需要创建项目的目录结构,包括源代码文件.资源文件等.一个常见的项目结构 ...
- 如何用 Java 写一个 Java 虚拟机
项目链接 https://github.com/FranzHaidnor/haidnorJVM haidnorJVM 使用 Java17 编写的 Java 虚拟机 意义 纸上得来终觉浅,绝知此事要躬行 ...
- Django reset framework: 序列化
序列化与反序列化 将模型转换为json 称之为 序列化 将json转换为模型 称之为 反序列化 何时进行序列化与反序列化 序列化:当后端将数据库中信息取出返回给前端时,要进行序列化操作 反序列化:当需 ...
- 显示Label标签
1 from PyQt5.QtWidgets import QApplication, QLabel, QWidget, QVBoxLayout 2 from PyQt5.QtCore import ...
- 解决:ValueError: Cannot mask with non-boolean array containing NA / NaN values
错误原因:这里就是说,分组这一列里面,包含了非字符串的内容,比如数字.因为 .str.contains 的使用就要求这个字段必须是字符串,不能掺杂数字的. 解决方案: # 包含对应关系的所有行 dat ...
- 学习OI两年我到底收获了什么
做一个小小的总结 学习了两年的代码,刚刚要进入高中,留下一点文字给以前的学习做一个总结. 命中注定の邂逅-- 这两年之间,和编程产生了比学习更为低调的羁绊关系(我觉得用这个词语比较合适).编程给我带来 ...
- 《UNIX 传奇:历史与回忆》读后感
<UNIX 传奇:历史与回忆> 是 bwk(Brian W. Kernighan)2019 年的新作,回忆了 UNIX 在大半个世纪的风雨历程,是一本引人入胜的书籍.通过对 UNIX 操作 ...
- 如何用windows任务视图管理多个程序,提高.net开发效率
在 Windows 操作系统中,任务栏是一个非常重要的工具栏,用来显示当前正在运行的程序和任务.如果同时运行了很多程序,任务栏上的图标就会变得非常拥挤,不方便管理和切换.为了提高工作效率,可以通过任务 ...
- JVM性能监控和调优
JVM性能监控和调优 JVM(Java虚拟机)调优是为了优化Java应用程序的性能和稳定性.JVM调优的目的是通过调整JVM的配置参数和优化应用程序代码,使其在给定的硬件和软件环境下达到更好的性能表现 ...
- centos7关闭防火墙后只有22端口可以telnet的解决方法
1.问题描述 防火墙已经关闭 22端口可以telnet 其他端口无法telnet 2.解决方法 注意:下列命令要用root账号/权限执行 2.1.开启防火墙 systemctl start firew ...