aop

aop作用

白昼怎懂夜的黑 提交于 2020-04-05 19:55:39
场景一: 记录日志 场景二: 监控方法运行时间 (监控性能) 场景三: 权限控制 场景四: 缓存优化 (第一次调用查询数据库,将查询结果放入内存对象, 第二次调用, 直接从内存对象返回,不需要查询数据库 ) 场景五: 事务管理 (调用方法前开启事务, 调用方法后提交关闭事务 ) 来源: oschina 链接: https://my.oschina.net/u/4167465/blog/3214860

Spring注解配置Aop

寵の児 提交于 2020-04-05 19:49:05
之前学习了SpringAop的基本原理。 http://www.cnblogs.com/expiator/p/7977975.html 现在尝试使用注解来配置SpringAop。 Aop,面向切面编程。包括切入点(PointCut)、切面(Aspect),连接点(Joinpoint)、通知(Advice)、引入(Introduction) SpringAop注解,主要通过@AspectJ注解配置。 需要新增两个AspectJ库:aspectjweaver.jar和aspectjrt.jar,还有一个依赖aopalliance.jar包。 Aop注解配置如下: @Component @Aspect public class MyInterceptor { @Pointcut("execution (* cn.itcast.service.impl.UserServiceImpl.*(..))") private void cutMethod() {} // 声明一个切入点,cutMethod为切入点名称 // 声明该方法是一个前置通知:在目标方法开始之前执行 @Before("cutMethod() && args(name)") public void doAccessCheck(String name) { System.out.println("前置通知:" + name);

Spring AOP+注解 实现完美日志记录

为君一笑 提交于 2020-04-05 15:32:27
Spring IOC 及其 AOP是其两大核心功能,本篇介绍下AOP的相关实际知识和实际应用。下面先简单介绍下aop的概念和基础使用。 一、基本介绍 AOP(Aspect Oriented Programming),即面向切面编程,可以说是OOP(Object Oriented Programming,面向对象编程)的补充和完善。它利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。 使用"横切"技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。业务处理的代码完全不知道他会被代理,他也不清楚自己在执行前后会发生什么事情。核心关注点和横切关注点 是完全不相干的两种的处理方式。 AOP核心概念 1、横切关注点 对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点 2、切面(aspect)

spring aop

拈花ヽ惹草 提交于 2020-04-04 11:11:26
本文引用自 http://www.cnblogs.com/ityouknow/p/5329550.html 什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其名为“Aspect”,即方面。所谓“方面”,简单地说,就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。 AOP使用场景 AOP用来封装横切关注点,具体可以在下面的场景中使用: Authentication 权限 Caching 缓存 Context passing 内容传递 Error handling 错误处理 Lazy loading 懒加载 Debugging  调试 logging, tracing, profiling and monitoring 记录跟踪 优化 校准 Performance optimization 性能优化 Persistence  持久化 Resource pooling 资源池 Synchronization 同步 Transactions 事务 Spring AOP底层技术 Spring提供了两种方式来生成代理对象: JDKProxy和Cglib

Spring AOP配置-xml

 ̄綄美尐妖づ 提交于 2020-04-04 10:02:23
基于xml的spring AOP配置主要有几个步骤: 1、创建切面类   编写自定义增强代码(如事务处理,日志等) 2、创建service   提供连接点 3、配置切面 在配置之前,先了解一些专业术语 连接点:被拦截的方法 切入点:拦截规则(符合规则被拦截的一类方法) 通知/增强:对拦截的方法添加自定义功能 切面:就是切面类,在其中自定义通知 编写切面类 //切面类 public class AspectClazz { public void save() { System.out.println("保存"); } } 编写业务层代码 package my.service; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import my.pojo.Student; @RunWith(value

spring AOP的基本概念

早过忘川 提交于 2020-04-02 21:49:59
AOP的概念和使用原因   现实中有一些内容并不是面向对象(OOP)可以解决的,比如数据库事务,它对于企业级的Java EE应用而言是十分重要的,又如在电商网站购物需要经过交易系统、财务系统,对于交易系统存在一个交易记录的对象,而财务系统则存在账户的信息对象。从这个角度而言,我们需要对交易记录和账户操作形成一个统一的事务管理。交易和账户的事务,要么全部成功,要么全部失败。   交易记录和账户记录都是对象,这两个对象需要在同一个事务中控制,这就不是面向对象可以解决的问题,而需要用到面向切面的编程,这里的切面环境就是数据库事务。   AOP编程有着重要的意义,首先它可以拦截一些方法,然后把各个对象组织成一个整体,比如网站的交易记录需要记录日志,如果我们约定好了动态的流程,那么就可以在交易前后、交易正常完成后或者交易异常发生时,通过这些约定记录相关的日志了。   回到JDBC的代码中,令人最讨厌和最折腾的问题永远是无穷无尽的try...catch...finally...语句和数据库资源的关闭问题,而且这些代码会存在大量重复,加上开发者水平参差不齐。Spring出现前,在Java EE的开发中,try...catch...finally语句常常被严重滥用,使得Java EE的开发存在着许多问题,虽然MyBatis对JDBC做了良好的封装,但是还是不足的。  

SpringAOP在web应用中的使用

帅比萌擦擦* 提交于 2020-04-02 16:12:39
之前的aop是通过手动创建代理类来进行通知的,但是在日常开发中,我们并不愿意在代码中硬编码这些代理类,我们更愿意使用DI和IOC来管理aop代理类。Spring为我们提供了以下方式来使用aop框架 一、以声明的方式配置AOP(就是使用xml配置文件) 1.使用ProxyFactoryBean的方式: ProxyFactoryBean类是FactoryBean的一个实现类,它允许指定一个bean作为目标,并且为该bean提供一组通知和顾问(这些通知和顾问最终会被合并到一个AOP代理中)它和我们之前的ProxyFactory都是Advised的实现。 以下是一个简单的例子:一个学生和一个老师,老师会告诉学生应该做什么。 public class Student { public void talk() { System.out.println("I am a boy"); } public void walk() { System.out.println("I am walking"); } public void sleep() { System.out.println("I want to sleep"); } } 老师类 public class Teacher { private Student student; public void tellStudent(){

AOP原理及其实现

走远了吗. 提交于 2020-04-02 07:18:42
AOP 是 Aspect-Oriented programming 的缩写,中文翻译为面向切面编程,它是 OOP ( Object-Oriented Programing ,面向对象编程)的补充和完善。它和OOP一样是一种编程思想。 AOP基本概念 横切(cross-cutting): 与对象核心功能无关的公共行为 关注点(concern): 一块我们感兴趣的区域 方面(Aspect): 就是将那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可操作性和可维护性。 连接点(join point): 是程序执行中一个精确执行点,例如类中的一个方法。它是一个抽象的概念,在实现AOP时,并不需要去定义一个连接点。 切入点(point cut): 本质是一个捕获连接点的结构。在AOP中,可以定义一个切入点来捕获相关方法的调用。 通知(advice): 是“切入点”的执行方代码,是执行“方面”的具体逻辑 引入(introduce): 为对象引入附加的方法或属性,从而达到修改对象结构的目的 AOP本质 OOP通过封装、继承及多态等概念来建立一种对象层次结构,用来模式现实事物。因为OOP中每个对象都是独立的,因此当我们需要引入公共行为时(日志、安全、异常),代码显得比较臃肿。而AOP很好的解决了这一问题。它剖开对象内部把”横切

Spring Boot实践——AOP实现

随声附和 提交于 2020-04-01 07:56:45
Spring AOP 介绍   AOP的介绍可以查看 Spring Boot实践——AOP实现   与AspectJ的静态代理不同,Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改字节码,而是在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。   Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理。JDK动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。JDK动态代理的核心是 InvocationHandler 接口和 Proxy 类。   如果目标类没有实现接口,那么Spring AOP会选择使用CGLIB来动态代理目标类。CGLIB(Code Generation Library),是一个代码生成的类库,是利用asm开源包, 可以在运行时动态的生成某个类的子类 。注意,CGLIB是通过继承的方式做的动态代理,因此如果某个类被标记为 final ,那么它是无法使用CGLIB做动态代理的。   这里有注意的几点如下: 从Spring 3.2以后不再将CGLIB放在项目的classpath下,而是将CGLIB类打包放在spring-core下面的org.springframework中

Spring框架中的aop操作之一 及aspectjweaver.jar与aopalliance-1.0.jar下载地址 包含beans 注解context 和aop的约束

旧时模样 提交于 2020-03-30 21:13:16
(aspect oriented programming面向切面编程) 首先在原有的jar包: 需Spring压缩包中的四个核心JAR包 beans 、context、core 和expression 下载地址: https://pan.baidu.com/s/1qXLHzAW 以及日志jar包 commons-logging 和log4j 下载地址: https://pan.baidu.com/s/1mimTW5i 再增加一个 spring-aop-5.0.1.RELEASE.jar (用于注解,在Spring-framework库中包含) 再增加 spring-aspects-5.0.1.RELEASE.jar (在Spring-framework库中包含) aspectjweaver-1.8.12.jar (官方下载地址 http://mvnrepository.com/artifact/org.aspectj/aspectjweaver) spring收购的aspectj的一部分包只关于weaver的 aopalliance-1.0.jar (官方下载地址 http://mvnrepository.com/artifact/aopalliance/aopalliance/1.0) 上边是aop联盟的包 然后在 Spring