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使用的更多相关文章

  1. Spring-AOP实践 - 统计访问时间

    公司的项目有的页面超级慢,20s以上,不知道用户会不会疯掉,于是老大说这个页面要性能优化.于是,首先就要搞清楚究竟是哪一步耗时太多. 我采用spring aop来统计各个阶段的用时,其中计时器工具为S ...

  2. Spring-Aop入门

    (一)Aop术语定义 1.通知(advice) 通知定义了切面要做什么工作,即调用的方法,同时定义了什么时候做这些工作,即以下五种类型 (1)前置通知(Before) :在目标方法调用之前执行切面方法 ...

  3. 转-springAOP基于XML配置文件方式

    springAOP基于XML配置文件方式 时间 2014-03-28 20:11:12  CSDN博客 原文  http://blog.csdn.net/yantingmei/article/deta ...

  4. SpringAOP详解(转载大神的)

    AOP(Aspect-Oriented Programming)这个东西,名字与 OOP 仅差一个字母,其实它是对 OOP 编程方式的一种补充,并非是取而代之.翻译过来就是"面向方面编程&q ...

  5. spring-aop学习

     SpringAOP学习 author:luojie 1.  AOP中的基本概念 AOP的通用术语,并非spring java所特有.很遗憾AOP的术语不是特别的直观.但如果让Spring java来 ...

  6. SpringAOP之静态代理

    一.SpringAOP: ⒈AOP:Aspect Oriented Programming 面向切面编程, 实现的是核心业务和非核心业务之间的的分离,让核心类只做核心业务,代理类只做非核心业务.  ⒉ ...

  7. springaop实现登陆验证

    1.首先配置好springmvc和springaop 2.先写好登陆方法,通过注解写代理方法 通过代理获得登陆方法的参数方法名,然后再aop代理方法内进行登陆验证 贴出代码 package com.h ...

  8. spring-aop示例

    具体案例放在github上,主要是jar包在上面 https://github.com/guoyansi/spring-aop-example knights.xml <?xml version ...

  9. 使用SpringAop 验证方法参数是否合法

    (原文地址:http://blog.csdn.net/is_zhoufeng/article/details/7683194) 1.依赖包    aspectjweaver.jar 其中Maven的配 ...

  10. 关于SpringAOP的XML方式的配置

    AOP(XML)[理解][应用][重点] 1.AOP基础实例 A.导入jar包 核心包(4个)         日志(2个)             AOP(4个) Spring进行AOP开发(1个) ...

随机推荐

  1. Mina2中IoService

    Apache MINA 2 是一个开发高性能和高可伸缩性网络应用程序的网络应用框架.它提供了一个抽象的事件驱动的异步 API,可以使用 TCP/IP.UDP/IP.串口和虚拟机内部的管道等传输方式. ...

  2. Servlet3.0之八:基于Servlet3.0的文件上传@MultipartConfig

    在Servlet2.5中,我们要实现文件上传功能时,一般都需要借助第三方开源组件,例如Apache的commons-fileupload组件,在Servlet3.0中提供了对文件上传的原生支持,我们不 ...

  3. AngularJS:SQL

    ylbtech-AngularJS:SQL 1.返回顶部 1. AngularJS SQL 在前面章节中的代码也可以用于读取数据库中的数据. 使用 PHP 从 MySQL 中获取数据 AngularJ ...

  4. $route路由

    <!DOCTYPE html><html ng-app="AngularApp"> <head> <meta charset=" ...

  5. 使用Fiddler进行iOS APP的HTTP/HTTPS抓包

    Fiddler不但能截获各种浏览器发出的HTTP请求, 也可以截获各种智能手机发出的HTTP/HTTPS请求.Fiddler能捕获IOS设备发出的请求,比如IPhone, IPad, MacBook. ...

  6. 函数指针的应用学习Demo

    学习函数指针的应用 ,简单demo #include "stdafx.h" #include "SubClass.h"; //函数指针 typedef int ...

  7. java ----获取路径的各种方法(总结)

    Java Web开发中路径问题小结 (1) Web开发中路径的几个基本概念 假设在浏览器中访问了如下的页面,如图1所示: 那么针对这个站点的几个基本概念表述如下: 1. web站点的根目录:http: ...

  8. 11-19网页基础--第二部分CSS样式表基本概念

    CSS,全称(Cascading Style Sheets,层叠样式表),作用是美化HTML网页. 一.基本概念:是用于(增强)控制网页样式并允许将样式信息与网页内容分离的一种标记性语言. 你可能对C ...

  9. 10-21C#基础--集合

    二.集合  //定义一个集合,集合是一个类, 1. 定义: ArrayList al = new ArrayList(); 2.添加数据:al.add();//添加数值,可以添加无数个元素,集合中没有 ...

  10. 从文件中读取yuv和h264数据

    1.从文件中读取h264数据 参考ffmpeg avc.c写的从文件中一帧帧读取h.264数据的demo #include <stdio.h> #include <stdlib.h& ...