1.定义:AOP:Aspect Oriented Programming  面向切面编程; 在运行时动态的将代码切入到指定的点,方法位置上,可以随意添加和删除,不对源代码产生影响,具有解耦的作用;

2.主要作用:方法执行前,执行后需要记录日志,或者执行前需要验证操作权限之类的可以动态的切入,而不用重复的去实现,

3.Aspect 中使用到的注解:

Join Point:表示在程序中明确定义的执行点,典型的Join point包括方法调用,对类成员的访问以及异常处理程序块的执行,他自身还可以嵌套其他Join Point;

PointCut:事件切入点:表示一组Join Point,把事件发生的地点进行了规律性的总结,通过通配,正则表达式等方式集中起来,定义了相应的advice(事件)要发生的地方;正则表达式 (com.example.service.*,即所有在 service 包下面的方法);

Advice:advice定义了在Point Cut里面定义的程序点具体要做的操作,他通过@before,@after 和@around 来区别是在每个join Point 之前,之后还是代替执行的代码;

4.Aop中所用的表达式

其中 execution是用的最多的,其格式为:

execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?)

returning type pattern,name pattern, and parameters pattern是必须的.

ret-type-pattern:可以为*表示任何返回值,全路径的类名等.

name-pattern:指定方法名,*代表所以,set*,代表以set开头的所有方法.

parameters pattern:指定方法参数(声明的类型),(..)代表所有参数,(*)代表一个参数,(*,String)代表第一个参数为任何值,第二个为String类型.

(1)定义在service包里的任意方法的执行:execution(* com.zhou.service.*.*(..))

(2)定义在service包和所有子包里的任意类的任意方法的执行:execution(* com.zhou.service..*.*(..))

(3)AccountService 接口的任意方法的执行:execution(* com.zhou.service.AccountService.*(..))

5.简单的demo,方法之前执行before:

需要引入的包:

org.aspectj

aspectjrt

1.8.10

org.aspectj

aspectjweaver

1.8.10

org.aspectj

aspectjtools

1.8.10

cglib

cglib

2.2

org.springframework

spring-aop

4.3.11.RELEASE

org.springframework

spring-context

4.3.10.RELEASE

在spring  xml中需要配置:

定义简单的注解:

@Retention(RetentionPolicy.RUNTIME)

public @interface LogAnnotation {

public String description() default "init";

}

注解切入点:有两种方式,一种是直接在代码中写,另一种就是在xml中配置;

@Aspect

public class LogIntecept {

public void logPoint(){

}

@Before(value = "execution(* com.zhou.module..*.*(..))")

public void methodBeforeLog(){

System.out.println("method BeforeLog()");

}

}

或者是这样:

import com.zhou.annotation.LogAnnotation;

public interface TaskBO {

@LogAnnotation(description = "recieveTask")

public void recieveTask();

}

public class TaskBOImpl implements TaskBO {

public void recieveTask() {

System.out.println("do something()");

}

}

以上基本上级就是简单的aop 代码:

在main中测试下:

/**

* Hello world!

*

*/

public class App

{

public static void main( String[] args )

{

System.out.println( "Hello World!" );

ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

TaskBO taskBO = (TaskBO) context.getBean("taskBO");

taskBO.recieveTask();

}

}

输出:

java aspect demo_Spring AOP + Aspect 实现切面编程相关推荐

  1. 什么是 Java 中的 AOP(面向切面编程)?如何使用它来实现横切关注点?

    AOP(Aspect-oriented programming,面向切面编程),是一种编程思想和技术,旨在将横切关注点和主业务逻辑分离,使得系统更容易扩展和维护.在 Java 中,AOP 主要通过代理 ...

  2. AOP (面向切面编程)

    AOP (面向切面编程) 编辑 在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AO ...

  3. AOP系列:切面编程框架 : AspectJ

    Android AOP方案(一)--AspectJ - 掘金AOP是一个概念,并没有设定具体语言的实现,它能克服那些只有单继承特性语言的缺点(如Java),AOP具体实现有很多种方式,AspectJ ...

  4. AOP(面向切面编程)、Filter(过虑器)、Interceptor(拦截器)

    AOP(面向切面编程) 面向切面编程(AOP是Aspect Oriented Program的首字母缩写) ,我们知道,面向对象的特点是继承.多态和封装.而封装就要求将功能分散到不同的对象中去,这在软 ...

  5. AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题

    AOP称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子. 一 AOP的基本概念 (1)Asp ...

  6. Spring核心AOP(面向切面编程)

    AOP(面向切面编程) 原理 相关术语 系统日志增强 异常抛出增强 最终增强 环绕增强 使用注解实现AOP AspectJ 转载于:https://www.cnblogs.com/xhddbky/p/ ...

  7. AOP就是面向切面编程,我们可以从几个层面来实现AOP。 ![](https://upload-im

    AOP就是面向切面编程,我们可以从几个层面来实现AOP. 在编译器修改源代码,在运行期字节码加载前修改字节码或字节码加载后动态创建代理类的字节码,以下是各种实现机制的比较. spring AOP是Sp ...

  8. Spring三大核心思想之AOP(面向切面编程)

    Spring三大核心思想之AOP(面向切面编程) 学习Spring三大核心思想之AOP之前建议先学习:

  9. 【SSM框架系列】Spring 的 AOP(面向切面编程)

    什么是 AOP AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术. AOP 是 OOP ...

  10. 简单理解AOP(面向切面编程)

    来源:http://www.cnblogs.com/jyh317/p/3834271.html AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式 ...

最新文章

  1. 彻底卸载 RAD Studio 2009/2010/XE+ 的步骤
  2. 爬取广州所有停车场数据(Python)(并行加速版本)
  3. 2021音视频开发的“坑”,等你来填!
  4. 解决jupyter notebook的kernel error内核启动失败问题
  5. 宏与内联(inline)的区别(转载)
  6. web通讯录之登录注册界面
  7. Vue-touch的使用
  8. Mysql学习总结(51)——Linux主机Mysql数据库自动备份
  9. 原生js之同级元素添加移除class
  10. ES6+webpack实现Counter
  11. 深度 | 朴素贝叶斯模型算法研究与实例分析
  12. Molten 功能简介以及使用指南
  13. bat for循环_bat教程[285] FOR/F options选项中usebackq的用法
  14. wap,WML语言与编程
  15. 超详细的Python实现百度云盘模拟登陆(模拟登陆进阶) 1
  16. HTML5-canvas标签结合简单实例讲解
  17. Java IO流之规律总结
  18. 读书笔记——《岛上书店》
  19. ubuntu11.10 华为无线上网卡e303s
  20. ASW3410设计说明|双通道 2切1/1切2 USB3.1 多路切换器设计|USB3.1/2.0双向切换方案

热门文章

  1. Android视频列表自动播放功能
  2. USB接口不同颜色的作用
  3. 细说10月24号为什么是程序员的节日?
  4. ReactNative实现仿微信或者通讯录快速索引功能
  5. 面试中问到的遇到什么困难的问题,如何解决? 方法论借鉴
  6. 隔离DCDC电源模块和非隔离DCDC电源模块不同之处
  7. java okhhtp下载学信网学籍信息
  8. C语言实现FTP客户端(已编译,亲试可用~)
  9. 腾讯云游戏多媒体解决方案
  10. 电脑老是显示断开资产管理服务器,史上最强开机维护通道2016年0825重大功能更新(网络版、电脑资产管理、分层桌面秀)...