博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java之aop
阅读量:5037 次
发布时间:2019-06-12

本文共 2757 字,大约阅读时间需要 9 分钟。

1.AOP:aspect orientied programming 面向切面编程。就是横向编程。

2.面向切面编程是在不改变原有代码的情况下增加新的功能。

3.在spring中面向切面编程有两种应用:

  a) 声明式事务

  b) 自定义aop编程

4.spring 提供了aop的相关概念及api :

切面(Aspect) : 一个关注点的模块化,这个关注点可能会横切多个对象。

连接点 (Joinpoint) : 在程序执行过程中某个特定的点,在Spring AOP 中,一个连接点总是表示一个方法的执行。

通知 (Advice) : 在切面的某个特定的连接点上执行的动作。

切入点( Pointcut) : 匹配连接点的断言。

目标对象(Target Object): 被一个或多个切面所通知的对象。

AOP 代理(AOP Proxy):AOP代理可以是JDK动态代理或者CGLIB代理。

织入(Weaving) : 把切面连接到其他应用程序类型或者对象上,并创建一个被通知的对象。

5.通知的类型

  a) 前置通知(Before advice) : 在某连接点之前执行的通知,但这个通知不能阻止连接点之前的执行流程(除非它抛出一个异常)。

  b) 后置通知(After returning advice): 在某连接点正常完成后执行的通知;例如,一个方法没有抛出任何异常,正常返回。

  c) 异常通知(After throwing advice) : 在方法抛出异常退出时执行的通知(不论正常返回还是异常退出)。

  d) 环绕通知(Around Advice): 包围一个连接点的通知,如方法调用。

6.使用spring提供的api进行 aop 的开发

  a) 新建 java 项目

  b) 导入 jar 包

aopalliance.jar

aspectjweaver.jar

commons-logging.jar

spring-aop-4.1.6.RELEASE.jar

spring-aspects-4.1.6.RELEASE.jar

spring-beans-4.1.6.RELEASE.jar

spring-context-4.1.6.RELEASE.jar

spring-core-4.1.6.RELEASE.jar

spring-expression-4.1.6.RELEASE.jar

spring-tx-4.1.6.RELEASE.jar

  c) 编写相关类

LogAdvice.java

/** *  *  实现一个公共的日志业务,该业务实现了spring提供的前置通知 */public class LogAdvice implements MethodBeforeAdvice{    @Override    public void before(Method method, Object[] args, Object target) throws Throwable {        System.out.println(target.getClass().getSimpleName()+":"+method.getName()+"方法被执行");    }}

UserServiceImpl.java

/** * 在service的方法中,经常会有一些公共的功能, * 如:事务,日志,权限,缓存等 * */public class UserServiceImpl implements UserService{    @Override    public void add() {        System.out.println("add");    }    @Override    public void delete() {        System.out.println("delete");    }    @Override    public void update() {        System.out.println("update");    }}

  d) 编写配置文件

  e) 测试

public class AopTest {    @Test    public void testBeforeAdvice(){        ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");        UserService us = (UserService)ac.getBean("userService");        us.add();    }}

7. spring提供了一种 无侵入性 的 aop 实现

通知的代码

/** *  *  实现一个公共的日志业务 */public class LogAdvice{    public void log(){        System.out.println("-----相关日志信息----");    }}

配置

8. 通过注解来实现 aop

通知

/** *  *  实现一个公共的日志业务 */@Aspectpublic class LogAdvice{    @Before("execution(* cn.sxt.service.impl.*.*(..))")    public void log(){        System.out.println("-----相关日志信息----");    }}

配置中,使用自动配置

 

转载于:https://www.cnblogs.com/Vincent-yuan/p/11267582.html

你可能感兴趣的文章
一个Java程序员应该掌握的10项技能
查看>>
c#英文大小写快捷键
查看>>
tpframe免费开源框架又一重大更新
查看>>
一.go语言 struct json相互转换
查看>>
什么是架构设计
查看>>
程序员学习能力提升三要素
查看>>
PHP 微信错误状态返回码说明
查看>>
【4.1】Python中的序列分类
查看>>
ubuntu 移动文件
查看>>
Easy Mock
查看>>
看看 Delphi XE2 为 VCL 提供的 14 种样式
查看>>
Python内置函数(29)——help
查看>>
机器学习系列-tensorflow-01-急切执行API
查看>>
SqlServer 遍历修改字段长度
查看>>
Eclipse快捷键:同时显示两个一模一样的代码窗口
查看>>
《架构之美》阅读笔记05
查看>>
《大道至简》读后感——论沟通的重要性
查看>>
JDBC基础篇(MYSQL)——使用statement执行DQL语句(select)
查看>>
关于React中props与state的一知半解
查看>>
java中Hashtable和HashMap的区别(转)
查看>>