Spring-AOP注解与方法规则实例
来源:互联网 发布:windows xp 美化大师 编辑:程序博客网 时间:2024/05/22 16:07
一、前言
在实际开发中,我们很多操作需要拦截来解决问题。例如我们老生常谈的日志和方法操作的一些统计。我这里做一个aop例子,以供自己和大家实用起来方便。
本文主要有两种方式解决aop:1、实用注解 2、实用方法规则方法
两种方式都是基于java文件的,为什么没有基于xml,因为xml已经out于太繁琐,比较不是全项目的拦截,所以不用xml配置。
项目链接地址:点击打开链接 https://github.com/yangchangyong0/springaopTest
二、使用注解实现aop
2.1 首先编写注解类
package com.ycy.annotation;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * Created by ycy on 16/4/8. * 编写拦截的注解 */@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface Action { String name();}
2.2 对需要拦截方法加注解
package com.ycy.annotation;import org.springframework.stereotype.Service;/** * Created by ycy on 16/4/8.\ * 对需要注解的方法加上注解 */@Servicepublic class DemoAnnotationService { @Action(name = "注解连接add方法操作") public void add(){ System.out.println("DemoAnnotationService执行add方法"); }}
三、使用方法规则实现aop
3.1 直接编写类(不需要任何其他操作)
package com.ycy.method;import org.springframework.stereotype.Service;/** * Created by ycy on 16/4/8. * 直接编写类,不需要其他任何操作 */@Servicepublic class DemoMethodService { public void add(){ System.out.println("DemoMethodService执行add方法"); }}
四、aop切面编写
在切面中,我们使用after 与before ,将两种拦截切面都做了拦截。
package com.ycy.aop;import com.ycy.annotation.Action;import org.aspectj.lang.JoinPoint;import org.aspectj.lang.annotation.After;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.aspectj.lang.reflect.MethodSignature;import org.springframework.stereotype.Component;import java.lang.reflect.Method;///** * Created by ycy on 16/4/8. */@Aspect//1@Component//2public class LogAspect { /*拦截累切点编写*/ @Pointcut("@annotation(com.ycy.annotation.Action)")//3 public void annotationPointCut(){ System.out.println("开始拦截--但是不打印"); } /*使用注解方法拦截*/ @After("annotationPointCut()") public void after(JoinPoint joinPoint){ MethodSignature signature=(MethodSignature)joinPoint.getSignature(); Method method=signature.getMethod(); Action action=method.getAnnotation(Action.class); System.out.println("注解拦截方式:"+action.name());//5 } /*使用方法规则拦截*/ @Before("execution(* com.ycy.method.DemoMethodService.*(..))")//6 public void before(JoinPoint joinPoint){ MethodSignature signature=(MethodSignature)joinPoint.getSignature(); Method method=signature.getMethod(); System.out.println("方法规则拦截方式:"+method.getName()); }}
在使用spring框架配置AOP的时候,不管是通过XML配置文件还是注解的方式都需要定义pointcut"切入点"例如定义切入点表达式 execution(* com.sample.service.impl..*.*(..))execution()是最常用的切点函数,其语法如下所示: 整个表达式可以分为五个部分: 1、execution(): 表达式主体。 2、第一个*号:表示返回类型,*号表示所有的类型。 3、包名:表示需要拦截的包名,后面的两个句点表示当前包和当前包的所有子包,com.sample.service.impl包、子孙包下所有类的方法。 4、第二个*号:表示类名,*号表示所有的类。 5、*(..):最后这个星号表示方法名,*号表示所有的方法,后面括弧里面表示方法的参数,两个句点表示任何参数。
五、测试代码
package com.ycy.main;import com.ycy.annotation.DemoAnnotationService;import com.ycy.method.DemoMethodService;import org.springframework.context.annotation.AnnotationConfigApplicationContext;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.context.annotation.EnableAspectJAutoProxy;/** * Created by ycy on 16/4/8. * 1使用扫描注解方法建立context * 然后执行我们的两个测试方法 */@Configuration@ComponentScan("com.ycy")@EnableAspectJAutoProxy//1public class AopconfigTest { public static void main(String[] args) { AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AopconfigTest.class); DemoAnnotationService demoAnnotationService = context.getBean(DemoAnnotationService.class); DemoMethodService demoMethodService = context.getBean(DemoMethodService.class); demoAnnotationService.add(); demoMethodService.add(); }}
测试结果输出
DemoAnnotationService执行add方法注解拦截方式:注解连接add方法操作方法规则拦截方式:addDemoMethodService执行add方法Process finished with exit code 0
0 0
- Spring-AOP注解与方法规则实例
- Spring AOP+AspectJ注解实例
- spring AOP 基于注解的匹配规则
- Spring Aop实例之AspectJ注解配置
- Spring Aop实例之AspectJ注解配置
- Spring AOP与IOC以及自定义注解
- spring中自定义注解(annotation)与AOP中获取注解
- Spring中自定义注解与AOP中获取注解
- spring中自定义注解(annotation)与AOP中获取注解
- Spring 注解版简单实例之AOP(四)
- Spring AOP实例(schema配置,aspectJ注解)
- spring(AOP) 注解实现aop
- spring注解实现AOP
- Spring Aop 注解
- spring aop 注解
- spring aop注解Demo
- spring中 aop注解
- Spring AOP 完全注解
- git不是内部命令
- STL与泛型编程-第一周笔记-Geekband
- HDOJ 1330 Deck(叠木块-物理题啊!贪心算法用到了一点)
- 构造函数的返回值
- 风控评分模型
- Spring-AOP注解与方法规则实例
- 生产者消费者模型(多个生产者和多个消费者)JDK1.5之前实现版
- Linux find --搜索文件
- 将固定的空间添加到window上,并拉起QQ聊天界面
- http协议中:GET/POST/PUT/DELETE/INPUT/TRACE/OPTIONS/HEAD方法
- select系统调详细说明
- 如何现实隐藏UIBarButtonItem? show/hide a UIBarButtonItem
- 如何在 Linux 终端中知道你的公有 IP
- 非常好用的网络请求调试工具(chrome postman)