SpringAOP使用
AspectJ 注解:
1、@Aspect、@Pointcut、Advice
@Aspect
@Component
public class SecurityAspect {
@Autowired
AuthService authservice;
@Pointcut("@annotation(Adminonly)")
public void adminonly() {
}
@Before("adminonly()")
public void checkAccess() {
authService.checkAccess();
}
}
2、Pointcut expression:designators(指示符) 、wildcards(通配符)、operators(操作符)
designators :
匹配方法:execution()
匹配注解:@target()、@args()、@within()、@annotation()
匹配包/类型:within()
匹配对象:this()、bean()、target()
匹配参数:args()
wildcards(通配符):* 匹配任意数量的字符、+匹配指定类及其子类、..一般用于匹配任意数的子包或参数
operators(运算符):&&与操作符、||或操作符、!非操作符
5种Advice注解
1、@Before,前置通知
2、@After(finally),后置通知,方法执行完之后
3、@AfterReturning,返回通知,成功执行之后
4、@AfterThrowing,异常通知,抛出异常之后
5、@Aroud,环绕通知
匹配包/类型
@Pointcut(“within(com.imooc.service.ProductService)”) //匹配ProductService类里的所有方法
public void matchType(){}
@Pointcut(“within(com.imooc..*)”) //匹配com.imooc包及子包下所有类的方法
public void matchPackage(){}
匹配对象
/**public class DemoDao implements IDao{}*/
1、//匹配AOP对象的目标对象为指定类型的方法,即DemoDao的aop代理对象的方法
@Pointcut(“this(com.imooc.DemoDao)”)
public void thisDemo(){}
2、//匹配实现IDao接口的目标对象(而不是aop代理后的对象)的方法,这里即DemoDao的方法
@Pointcut(“target(com.imooc.IDao)”)
public void targetDemo(){}
3、//匹配所有以Service结尾的bean里的方法
@Pointcut(“bean(*Service)”)
public void beanDemo(){}
匹配参数
//匹配任何以find开头而且只有一个Long参数的方法
@Pointcut(“execution(**..find*(Long))”)
public void argsDemo1(){}
//匹配任何只有一个Long参数的方法
@Pointcut(“args(Long)”)
public void argsDemo2(){}
//匹配任何以find开头而且第一个参数为Long型的方法
@Pointcut(“execution(**..find*(Long, ..))”)
public void argsDemo3(){}
//匹配第一个参数为Long型的方法
@Pointcut(“args(Long,..)”)
public void argsDemo4(){}
匹配注解
//匹配方法标注有AdminOnly的注解的方法
@Pointcut(“@annotation(com.imooc.demo.security.AdminOnly)”)
public void annoDemo(){}
//匹配标注有Beta类底下的方法,要求的annotation的RetentionPolicy级别为CLASS
@Pointcut(“@within(com.google.common.annotations.Beta)”)
public void annoWithinDemo(){}
//匹配方法标注有Respository的类底下的方法,要求的annotation的RetentionPolicy级别为RUNTIME
@Pointcut(“@target(org.sprinframework.stereotype.Respository)”)
public void annoTargetDemo(){}
//匹配传入的参数类标注有Respository注解的方法
@Pointcut(“@args(org.sprinframework.stereotype.Respository)”)
public void annoArgsDemo(){}
SpringAOP使用的更多相关文章
- Spring-AOP实践 - 统计访问时间
公司的项目有的页面超级慢,20s以上,不知道用户会不会疯掉,于是老大说这个页面要性能优化.于是,首先就要搞清楚究竟是哪一步耗时太多. 我采用spring aop来统计各个阶段的用时,其中计时器工具为S ...
- Spring-Aop入门
(一)Aop术语定义 1.通知(advice) 通知定义了切面要做什么工作,即调用的方法,同时定义了什么时候做这些工作,即以下五种类型 (1)前置通知(Before) :在目标方法调用之前执行切面方法 ...
- 转-springAOP基于XML配置文件方式
springAOP基于XML配置文件方式 时间 2014-03-28 20:11:12 CSDN博客 原文 http://blog.csdn.net/yantingmei/article/deta ...
- SpringAOP详解(转载大神的)
AOP(Aspect-Oriented Programming)这个东西,名字与 OOP 仅差一个字母,其实它是对 OOP 编程方式的一种补充,并非是取而代之.翻译过来就是"面向方面编程&q ...
- spring-aop学习
SpringAOP学习 author:luojie 1. AOP中的基本概念 AOP的通用术语,并非spring java所特有.很遗憾AOP的术语不是特别的直观.但如果让Spring java来 ...
- SpringAOP之静态代理
一.SpringAOP: ⒈AOP:Aspect Oriented Programming 面向切面编程, 实现的是核心业务和非核心业务之间的的分离,让核心类只做核心业务,代理类只做非核心业务. ⒉ ...
- springaop实现登陆验证
1.首先配置好springmvc和springaop 2.先写好登陆方法,通过注解写代理方法 通过代理获得登陆方法的参数方法名,然后再aop代理方法内进行登陆验证 贴出代码 package com.h ...
- spring-aop示例
具体案例放在github上,主要是jar包在上面 https://github.com/guoyansi/spring-aop-example knights.xml <?xml version ...
- 使用SpringAop 验证方法参数是否合法
(原文地址:http://blog.csdn.net/is_zhoufeng/article/details/7683194) 1.依赖包 aspectjweaver.jar 其中Maven的配 ...
- 关于SpringAOP的XML方式的配置
AOP(XML)[理解][应用][重点] 1.AOP基础实例 A.导入jar包 核心包(4个) 日志(2个) AOP(4个) Spring进行AOP开发(1个) ...
随机推荐
- Poj 3287 Catch That Cow(BFS)
Description Farmer John has been informed of the location of a fugitive cow and wants to catch her i ...
- Erlang pool management -- RabbitMQ worker_pool 2
上一篇已经分析了rpool 的三个module , 以及简单的物理关系. 这次主要分析用户进程和 worker_pool 进程还有worker_pool_worker 进程之间的调用关系. 在开始之前 ...
- str.split和re.split中空格的区别
一.str.split和re.split的基本用法 1.str.spli的基本用法 现用下面的文件: 1 maqing:abc123 我们要建立一个用户名和用户密码的匹配关系: with open(& ...
- 【转】Inter-eNB S1 切换
本博客介绍Inter-eNB的S1切换的流程 当eNB收到测量报告,或是因为内部负荷分担等原因,触发了切换判决,进行eNB间小区间通过S1口的切换. 源eNB通过S1接口的 HANDOVER REQU ...
- 未在本地计算机上注册 Microsoft.ACE.OLEDB.12.0 提供程序
Visual Studio 8使用了Access数据库,provider选择了ACE.OLEDB,但是运行时出现了错误,提示未在本地计算机上注册"Microsoft.ACE.OLEDB.12 ...
- Python函数(九)-装饰器(二)
如果给被装饰器装饰的函数传递参数的话,需要在装饰器里修改 # -*- coding:utf-8 -*- __author__ = "MuT6 Sch01aR" import tim ...
- 12-21C#电脑蓝屏效果(可以恶搞整人哦)、输入输出流(StreamReader/streamWriter)
一.winform电脑蓝屏效果 第一种方法:基本操作: 第一步:创建一个新的C#窗体“Form1”: 第二步:在设计窗口中,更改其属性: 1)text属性:将form1的text属性中的文字取消掉,然 ...
- DDD学习笔录——领域驱动设计DDD概念总结
- [Python Study Notes]物体运动检测
基于opencv的cv2模块实现 ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ...
- Gstreamer编程
一.简介 GStreamer是一个开源的多媒体框架库.利用它,可以构建一系列的媒体处理模块,包括从简单的ogg播放功能到复杂的音频(混音)和视频(非线性编辑)的处理.应用程序可以透明的利用解码和过滤技 ...