基于Aspectj 注解实现 spring AOP
AOP 面向切面编程,是 OOP (面向对象编程)的补充
术语
横切关注点:方法中非主要业务逻辑部分
比如运算的模块:有验证参数、执行方法前的操作、执行方法、执行方法后的操作,验证参数、执行方法前后的操作是横切关注点
比如权限验证模块:在执行增删改查等方法前要进行验证,主要业务逻辑其实是增删改查,验证权限是横切关注点
比如日志模块:执行某方法前后都要生成文件或者往文件写入记录,日志记录是横切关注点
切面:横切关注点的抽象到一个类中
就是把横切关注点封装成一个类,在主要业务逻辑执行根据情况来调用
声明切面的步骤:1,把该类放入 IOC 容器,进行管理;2,使用注解 @Aspect 表明这是一个切面
通知:是切面类中的方法,用于在目标方法执行时执行
前置通知(@Before):目标方法执行前
后置通知(@After):目标方法执行后,无论是否发生异常
返回通知(@AfterRunning):目标方法正常结束后执行,可以知道目标方法的返回值
异常通知(@AfterThrowing):目标方法产生异常时执行,可以访问异常对象,进行打印,也可以指定异常才执行
环绕通知@(Around):包含上面4种
声明通知的步骤:1,指明通知类型;2,指明目标方法;3,配置文件使通知生效
连接点:用于获取目标方法的详细信息,方法名,参数值;JoinPoint
示例:
/**
* .切面类
* .第一步:添加 @Aspect 注解
* .第二步:添加 @Component 注解
* .第三步:指明通知类型和目标方法
*/
@Aspect
@Component
public class AspectCompute {
/**
* .第一个 * :任意返回值
* .第二个 * :com.weipai.service 包下的任意类
* .第三个 * :任意方法
* .(..):所有参数,不区分类型
*/
@Before("execution(* com.weipai.service.*.*(..))")
public void beforeMethod(JoinPoint info) {
// 获取目标方法名
String methodName = info.getSignature().getName();
// 获取目标方法参数值
List<Object> args = Arrays.asList(info.getArgs());
System.out.println("前置通知,方法名:" + methodName + ",参数:" + args);
}
}
@Service("compute")
public class Compute {
public void add(int i, int j, String k) {
System.out.println(i + j + k);
}
}
<!-- 扫描,支持spring注解 -->
<context:component-scan base-package="com.weipai.aspect,com.weipai.service" /> <!-- 配置 aspect :自动生成代理类 -->
<aop:aspectj-autoproxy />
public class ComputeTest extends TestCase {
private ApplicationContext ctx;
private Compute comp;
protected void setUp() throws Exception {
ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
comp = (Compute) ctx.getBean("compute");
}
public void testAdd() {
comp.add(1, 3, "hello");
}
}

基于Aspectj 注解实现 spring AOP的更多相关文章
- Spring Aop(二)——基于Aspectj注解的Spring Aop简单实现
转发地址:https://www.iteye.com/blog/elim-2394762 2 基于Aspectj注解的Spring Aop简单实现 Spring Aop是基于Aop框架Aspectj实 ...
- Spring学习之旅(八)Spring 基于AspectJ注解配置的AOP编程工作原理初探
由小编的上篇博文可以一窥基于AspectJ注解配置的AOP编程实现. 本文一下未贴出的相关代码示例请关注小编的上篇博文<Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AO ...
- Spring学习之旅(七)基于XML配置与基于AspectJ注解配置的AOP编程比较
本篇博文用一个稍复杂点的案例来对比一下基于XML配置与基于AspectJ注解配置的AOP编程的不同. 相关引入包等Spring AOP编程准备,请参考小编的其他博文,这里不再赘述. 案例要求: 写一 ...
- 使用@AspectJ注解开发Spring AOP
一.实体类: Role public class Role { private int id; private String roleName; private String note; @Overr ...
- spring 使用@AspectJ注解开发Spring AOP
选择切点 Spring是方法级别的AOP框架,而我们主要也是以某个类的某个方法作为切点,用动态代理的理论来说,就是要拦截哪个方法织入对应AOP通知. 代码清单:打印角色接口 package com.s ...
- Spring Aop(四)——基于Aspectj注解的Advice介绍
转发地址:https://www.iteye.com/blog/elim-2395315 4 基于Aspectj注解的Advice介绍 之前介绍过,Advice一共有五种类型,分别是before.af ...
- 基于注解的Spring AOP的配置和使用
摘要: 基于注解的Spring AOP的配置和使用 AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向切面编程.可以通过预编译方式和运行期动态代理实现在不 ...
- 基于注解的Spring AOP示例
基于注解的Spring AOP示例 目录 在XML配置文件中开启 @AspectJ 支持 声明切面及切入点 声明通知 测试 结语 在XML配置文件中开启 @AspectJ 支持 要使用Spring的A ...
- 基于注解的Spring AOP的配置和使用--转载
AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向切面编程.可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术. ...
随机推荐
- 浅谈 Nginx 的内部核心架构设计
一.前言 Nginx---Ngine X,是一款免费的.自由的.开源的.高性能HTTP服务器和反向代理服务器:也是一个IMAP.POP3.SMTP代理服务器:Nginx以其高性能.稳定性.丰富的功能. ...
- Spring 通知和顾问进行增强
使用顾问增加前置增强和后置增强 <bean id="1" class="目标对象"></bean> <bean id=" ...
- LeetCode: 2_Add Two Numbers | 两个链表中的元素相加 | Medium
题目: You are given two linked lists representing two non-negative numbers. The digits are stored in r ...
- mysql 开发基础系列5 字符串函数
字符串函数 1. concat (s1,s2,...sn) 连接里面的参数成一个字符串(注意上面写错了函数名称) SELECT CONCAT('ddd','CCC'); 2. insert(str ...
- Android布局:宽度适应的横向跟随,防止挤掉重要视图
不知道这样的布局该怎么描述,标题也是乱取的..直接上图吧 最近遇到了这样要求的布局: 1.上图中的“标题”长度不定,“状态”标签可能有多个并紧跟在标题右边,“属性”一直居右显示: 2.当“标题”过长, ...
- Java 容器 & 泛型:五、HashMap 和 TreeMap的自白
Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket Java 容器的文章这次应该是最后一篇了:Java 容器 系列. 今天泥瓦匠聊下 Maps. 一.Ma ...
- 项目ITP(五) spring4.0 整合 Quartz 实现任务调度
前言 系列文章:[传送门] 项目需求: 二维码推送到一体机上,给学生签到扫描用.然后需要的是 上课前20分钟 ,幸好在帮带我的学长做 p2p 的时候,接触过.自然 quartz 是首选.所以我就配置了 ...
- 如何用vue-router为每个路由配置各自的title
传统方法 以前在单页面路由中,就只能在html文件中定一个固定的网站的title.如果想要动态的去修改,需要使用如下的方法. document.title = '这是一个标题'; 这样会让我们做很多无 ...
- newwork setup
#-*-coding:utf-8-*- ######################################################################### # Copy ...
- python练习一—文本转化渲染为html
想学习python已经很久了,以前使用ArcGIS的时候学习过一些简单的python语法,用来进行一些简单的GIS数据处理,但是后来并没有用到工作中也就荒废了,后来断断续续看过一些,最近想学习一门新的 ...