5.AOP配置与应用(annotation的方式)
步骤:
a)在beans.xml文件中加上对应的xsd文件 spring-aop.xsd
b)加上<aop:aspectj-autoproxy>,使用aspectj来完成aop
<!-- 使用AspectJ 中的 AOP注解 需要先加上下面这句 -->
<aop:aspectj-autoproxy/> </beans>
c) 此时就可以解析对应的 Annotation
d) 建立我们的拦截类
e) 用 @Aspect 注解这个类
f) 建立处理方法
g) 用@Before 来注解方法
h) 写明白切入点(execution)
i) 让 spring 对我们的拦截器类进行管理
常见的Annotation
1.@Pointcut 切入点声明,以供其他方法使用
2.@Before 方法 执行之前织入
3.@AfterThrowing 方法抛出异常后织入
4.@After 类似异常的finally
5.@Around 环绕 类似 filter,如需继续往下执行,则需要像filter中执行FilterChain.doFilter(..)一样
执行ProceedingJoinPoint.proceed() 方可,
@Around("execution(* com.bjsxt.dao..*.*(..))")
public void before(ProceedingJoinPoint pjp) throws Throwable{
System.out.println("method start");
pjp.proceed();//类似FilterChain.doFilter(..)告诉jvm继续向下执行
}
拦截器类:
/*使用 Aspectj 的AOP 自动生成代理*/
@Aspect
/*这个类也需要被加载到Spring容器中,不然怎么代理*/
@Component
public class MethodInterceptor {
//@Before("execution(public void com.bjsxt.service.UserService.add(com.bjsxt.model.User))")
//不能直接针对UserService 进行织入,是因为,UserService没有实现接口,要导入 cglib
//在一个类没有实现接口时,如果要生成代理,需要使用 cglib.jar 来操作二进制码 来产生 代理的代码 //定义一个切点的集合 ,为这个集合起一个名字,为myMethod
//想使用这个切点的集合,只需要 以 myMethod 为value 即可
//public * com.bjsxt.service..*.add(..)) ==== com.bjsxt.service的任意子包下的任意类的add方法
@Pointcut("execution(public * com.bjsxt.service..*.add(..))")
public void myMethod(){}; //一个类如果实现了 接口,会使用JDK自带的 Proxy 和 InvocationHandler,来帮你产生代理
@Before("myMethod()")
public void beforeMethod() {
System.out.println("before");
} /*在方法返回结果之后,织入*/
@AfterReturning("myMethod()")
public void afterMethod() {
System.out.println("after");
} /*将指定方法around住,可以在这个方法前后织入业务,proceed() 执行此方法*/
@Around("myMethod()")
public void aroundMethod(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("Before Around Method");
pjp.proceed();
System.out.println("After Around Method");
}
}
测试类:
public class UserServiceTest {
@Test
public void test() throws Exception{ ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
//注:因为UserService 没有实现接口,使用cglib 操作二进制码,生成代理对象,所以这里是直接使用 UserService 去接收,
//在 UserService 实现了接口的情况下,就需要是用那个接口去接收,因为 在 使用jdk的 Proxy生成代理对象时,返回的是实现了这个接口的代理类,而不是UserService
UserService service = (UserService) applicationContext.getBean("userService"); service.add(new User());
}
}
a) 加上对应的xsd文件spring-aop.xsd
5.AOP配置与应用(annotation的方式)的更多相关文章
- Spring AOP配置方式
AOP 面向切面编程,允许在 java 应用中的方法调用的前后做一些处理. 本文通过实例介绍两种主要的Spring AOP 配置方式:xml 方式配置,注解方式配置 XML 方式配置 1. 项目包类结 ...
- spring aop配置及用例说明(1)
欢迎转载交流,博客地址http://www.cnblogs.com/shizhongtao/p/3469776.html 首先,什么是aop,其实通俗一点讲就是,再方法执行时候我们加入其它业务逻辑.比 ...
- Spring事务Transaction配置的五种注入方式详解
Spring事务Transaction配置的五种注入方式详解 前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识.通过这次的学 ...
- 利用aop插入异常日志的2种方式
AOP是面向切面编程,利用这个技术可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各个部分的耦合性降低,提高代码的可重用性,同时提高开发效率(来自百度百科). Spring AOP有两种实现方式,一 ...
- java框架之Spring(2)-注解配置IOC&AOP配置
注解配置IoC 准备 1.要使用注解方式配置 IoC,除了之前引入的基础 jar 包,还需要引入 spring-aop 支持包,如下: 2.在 applicationContext.xml 中引入 c ...
- Spring入门4.AOP配置深入
Spring入门4.AOP配置深入 代码下载 链接: http://pan.baidu.com/s/11mYEO 密码: x7wa 前言: 之前学习AOP中的一些概念,包括连接点.切入点(pointc ...
- Spring的AOP配置
Spring的AOP配置 1.先写一个普通类: package com.spring.aop; public class Common { public void execute(String us ...
- 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:Spring声明式事务管理(基于Annotation注解方式实现)
在 Spring 中,除了使用基于 XML 的方式可以实现声明式事务管理以外,还可以通过 Annotation 注解的方式实现声明式事务管理. 使用 Annotation 的方式非常简单,只需要在项目 ...
- 【Spring】Spring的事务管理 - 2、声明式事务管理(实现基于XML、Annotation的方式。)
声明式事务管理 文章目录 声明式事务管理 基于XML方式的声明式事务 基于Annotation方式的声明式事务 简单记录 - 简单记录-Java EE企业级应用开发教程(Spring+Spring M ...
- 三(二)、AOP配置
一.AOP的配置(注解) 步骤一.导入jar包: 处理那5个jar包之外,还需要导入: aopalliance aspectjweaver spring-aop spring-aspects 步骤二. ...
随机推荐
- pip安装pillow——死循环:[WinError5] & [TypeError:'module' object is not callable]
1.这次本来要安装个pillow,记得以前装了的,怎么这次就不行了.然后,下意识的使用:pip3 install pillow. 发现报错: [TypeError:'module' object is ...
- unity3d 嵌入iOS的 In App Purchase 应用程序内购买
Unity做东西是快,但是有些功能是需要额外开发的,比如 IAP (In App Purchase,应用程序内购买) 还好unity提供了灵活的扩展功能,允许嵌入原生代码来做一些unity未实现的功能 ...
- JS 正则表达式 控制文本框只能输入中文、英文、数字与指定特殊符号
JS 正则表达式 控制文本框只能输入中文.英文.数字与指定特殊符号(屏蔽表情输入) onkeyup:释放键盘事件 onpaste:粘贴事件 oncontextmenu :鼠标右击事件 只能输入中文: ...
- Flutter安卓客户端打包
想要安装到手机上,必须要进行打包,因为没有苹果手机,所以只能打包Android客户端的apk. 检查 App的配置 查看默认应用程序清单文件(位于/android/app/src/main/中的And ...
- Java工程师学习指南第7部分:重新学习MySQL与Redis
本文整理了微信公众号[Java技术江湖]发表和转载过的Mysql和Redis相关优质文章,想看到更多Java技术文章,就赶紧关注本公众号吧吧. 大白话说说mysql 面试官:给我说说你平时是如何优化M ...
- localstack环境搭建
前置 Python Docker Desktop 安装 1.使用pip安装aws-cli,则可以在cmd中使用aws命令: $pip install awscli 2.从dockerhub拉取kine ...
- “但行好事 莫问前程 只问耕耘 不问收获 成功不必在我 而功力必不唐捐” 科技袁人·年终盛典——5G是科技时代非常重要的基础设施
中国的科技实力:用数据对比展示当前中国整体科技实力在国际中的发展水平和未来的发展趋势. 主要分为基础研究和应用研究.其中基础研究通过论文数据进行对比展示,应用研究通过发明专利数据. 又分别结合当今中国 ...
- 攻防世界CRYPTO新手练习
0x01 base64 直接base64 Decode 得到flag cyberpeace{Welcome_to_new_World!} 0x02 Caesar key为12 的恺撒密码,解密德fla ...
- 【计算机视觉】opencv读取多个摄像头
[计算机视觉]opencv读取多个摄像头 标签(空格分隔): [图像处理] 说明:今天蹭了机器视觉课程,讲到了stereopsis,立体视觉,讲到了关于通过多个摄像头获取object的depth信息的 ...
- Java向上保留两位小数
setScale(2, BigDecimal.ROUND_UP) 例如:0.035 运算结果 为0.01