aop

SpringAOP

此生再无相见时 提交于 2020-01-29 06:23:07
AOP:面向切面编程,是Spring的两大基石之一。 AOP:作用 1、日志 按照以前的写法,会造成: 1)、代码混乱,越来越多的非业务需求(日志、验证等)加入后,原有的业务方法急剧膨胀,每个方法在处理核心业务逻辑的同时还必须兼顾其他的点。 2)、代码分散,以日志需求为例,只是为了满足这个单一的需求,就不得不在多个模块方法中加入重复相同的日志代码,如果日志需求变化,则要大量修改。 package aop; /** * @author chenpeng * @date 2018/6/3 21:33 */ public class ArithmeticCalculatorLogImpl implements ArithmeticCalculator { @Override public int add(int i, int j) { //每个方法都要这样加日志,麻烦 System.out.println("add....."+(i+j)); return i+j; } @Override public int sub(int i, int j) { System.out.println("sub....."+(i-j)); return i-j; } @Override public int mul(int i, int j) { System.out.println("mul....

Spring源码学习(七) AOP

扶醉桌前 提交于 2020-01-28 21:20:54
目录 (一)AOP使用示例 (二)动态AOP自定义标签 (三)创建AOP代理 (一)AOP使用示例 (1)XML配置 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd"> <bean class="vi.com.bean.postprocessors.BeanFactoryPostProcessorA"></bean> <bean id="user" class="vi.com

使用AOP实现日志处理

天涯浪子 提交于 2020-01-28 21:06:18
需求 希望对于每一个请求,都能在日志中记录 ① 请求的url ② 访问者ip ③ 调用的方法 ④ 参数 ⑤ 返回内容 实现 1. 配置日志 默认日志 Logback: 默认情况下,Spring Boot会用Logback来记录日志,并用INFO级别输出到控制台。在运行应用程序和其他例子时,你应该已经看到很多INFO级别的日志了。 日志级别从低到高分为: TRACE < DEBUG < INFO < WARN < ERROR < FATAL 默认情况下,Spring Boot将日志输出到控制台,不会写到日志文件 通过在application.yml配置日志输出到文件 logging : level : root : info com.incoding : debug file : log/imcoding.log 自定义日志配置 Spring Boot官方推荐优先使用带有-spring的文件名作为你的日志配置(如使用logback-spring.xml,而不是logback.xml),命名为logback-spring.xml的日志配置文件,spring boot可以为它添加一些spring boot特有的配置项(下面会提到)。 放在 src/main/resources 下面即可 < ? xml version = "1.0" encoding = "UTF-8" ? > <

Spring004--Spring AOP(mooc)

耗尽温柔 提交于 2020-01-28 19:24:59
一。Spring AOP概览 1.1。AOP(面向切面编程)是什么 1。 AOP是一种编程范式,而不是编程语言。   2。解决特写问题,不能解决所有问题   3。是OOP的补充,不是替代 除了面向切面编程,还有如下编程范式:   1。面向过程编程:如c/python   2。面向对象编程:如java/c++   3。函数式编程   4。事件驱动编程(GUI开发中比较常见)   5。面向切面编程 1.2。AOP(面向切面编程)解决的问题 1。DRY:Don't Repeat yourself 避免代码重复问题 2。SoC:Separation of Concerns 关注点分离 (1)。水平分离:展示层-》服务层-》持久层   (2)。垂直分离:模块划分(订单/库存等业务角度) (3)。切面分离:分离功能性需求与非功能性需求(把非功能性需求从功能性需求中剥离开来集中管理) 1.3。AOP(面向切面编程)好处 AOP好处即为“集中管理”: 1。集中处理某一关注点/横切逻辑; 2。可以方便的添加/删除关注点; 3。侵入性少,增强代码可读性及可维护性; 1.4。AOP(面向切面编程)应用声景 1。权限控制 2。缓存控制 3。事务控制(数据库事务控制) 4。审计日志(操作记录) 5。性能监控 6。分布式追踪 7。异常处理 以上为偏非功能性需求,特别适合AOP应用声景。 1.5。支持AOP

Spring基于XML的AOP配置

ぃ、小莉子 提交于 2020-01-28 18:50:56
小笔记 spring中基于XML的AOP配置步骤 1 、把通知Bean也交给spring来管理 2 、使用aop:config标签表名开始AOP配置 3 、使用aop:aspect标签表名配置切面 id属性:是给切面提供一个唯一标识 ref属性:是指定通知类bean的Id 4 、在aop:aspect标签内部使用对应标签来配置通知的类型 示例:让springLog方法在切入点方法执行之前执行:所以是前置通知 aop:before:标识配置前置通知 method属性:用于指定Logger类中哪个方法是前置通知 pointcut属性:用于指定切入点表达式,该表达式的含义指的是对业务层中哪些方法增强 切入点表达式的写法: 关键字: execution ( 表达式 ) 表达式:访问修饰符 返回值 包名 . 包名 . 包名 . . . 类名 . 方法名(参数列表) execution ( public void com . uek . service . impl . AccountServiceImpl . saveAccount ( ) ) 全通配写法: * * . . * . * ( . . ) 实际开发中的写法: 切到业务层实现类下的所有方法 * com . uek . service . impl . * . * ( . . ) 整体构架 pom.xml < ? xml

Spring AOP 浅谈

家住魔仙堡 提交于 2020-01-28 11:08:12
Spring AOP & JAVA浅谈 由来 AOP简单概念 核心切片概念 总结 JAVA浅谈) 由来 Spring框架及衍生产品广泛地应用于商业级工程项目,大家聊起Spring时往往离不开IOC(Inversion Of Control)与AOP(Aspect-oriented Programming), Spring的普及以及其对@AspectJ表达式的支持在一定程度上掩盖了纯粹AspectJ框架的光芒,甚至一定程度上模糊了开发人员对面向切面编程的认知,本文以Spring AOP为例,尝试以尽可能简洁的言语介绍AOP这一门技术及其在一个商业级项目的用途以及指出Spring AOP 与其他编译级AOP框架的区别。 注:本文仅包含作者本文理解,各位大佬有任何不同见解欢迎留言指导 AOP简单概念 AOP(aspect oriented programming)是对OOP(object oriented programming)编程思想的补充。在面向对象的世界中,编程的关注点在类(Class)上,或者说 ——类文件是关键的模块单元。这种编程方式很大程度地加强了代码的复用性(或许任何一门编程语言都是以 减少重复工作 作为目标演变的)。而AOP编程思想的关键模块单元为切面,关于切面的描述有很多,从 Spring Reference Documentation 中 Aspects

SpringBoot使用AOP统一处理日志

自古美人都是妖i 提交于 2020-01-28 03:19:13
我们已经学会了如何使用日志输出,可是如果在controller的类中每个方法名都写一个log输出肯定是不明智的选择。使用spring的AOP功能即可完成。 1. 在pom.xml中添加aspect依赖包。 <!-- aop --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency> 2. 添加全局的WebLogAspect类。 @Aspect @Component public class WebLogAspect { private Logger logger = LoggerFactory.getLogger(WebLogAspect.class); @Pointcut("execution(public * com.xmr.controller..*.*(..))") public void webLog(){ } @Before("webLog()") public void doBefore(JoinPoint joinPoint){ ServletRequestAttributes attributes = (ServletRequestAttributes)

spring ioc和aop的含义

霸气de小男生 提交于 2020-01-27 12:03:50
自己整理的一些笔记,如有错误欢迎提出指正,谢谢 1.IOC的定义? IOC:另外一种说法叫DI(Dependency Injection),即依赖注入,是一种设计思想。 我们通过IOC将相互依赖对象的创建、协调工作交给Spring容器去处理,每个对象只需要关注其自身的业务逻辑关系就可以了。 作用是为了解耦,降低类之间的耦合度,其设计思想就是设计模式的工厂模式, 我们并不需要知道其生产的具体过程,我们只要其产出的对象即可。 其工作流程就是:在Spring容器启动的时候,Spring会把你在application.xml中配置好的bean都初始化, 在你需要调用的时候,把已经初始化的bean分配给你要调用这些bean的类,而不用去创建一个对象的实例。 2.IOC的传值方式有哪些? 一般的是设值传入和构造方法传入。 3.IOC的容器有哪些? 常见的一般是ApplicationContext和BeanFactory,这两个容器的区别请看这里: http://blog.csdn.net/hi_kevin/article/details/7325554 4.依赖注入的实现方式 就是Java的反射,通俗的来讲就是根据给出的类名来动态地生成对象,用set方法将事先保存在hashmap中的类属性注入到类中。 AOP: 面向切面编程,被定义为促使软件系统实现关注点的分离的技术。

AOP:权限、缓存示例

余生颓废 提交于 2020-01-27 04:22:09
只有代码 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 using Microsoft.Practices.Unity; 8 using Microsoft.Practices.Unity.InterceptionExtension; 9 10 namespace AOPStudy 11 { 12 class Program 13 { 14 static void Main(string[] args) 15 { 16 var container = new UnityContainer() 17 .AddNewExtension<Interception>() 18 .RegisterType<ICacheManager, CacheManager>() 19 .RegisterType<IPermissionService, PermissionService>() 20 .RegisterType<IAuthenticationService, AuthenticationService>() 21 .RegisterType<IApplicationService

【Spring源码分析】AOP源码解析(上篇)

人走茶凉 提交于 2020-01-27 03:58:28
前言 前面写了六篇文章详细地分析了Spring Bean加载流程,这部分完了之后就要进入一个比较困难的部分了,就是AOP的实现原理分析。为了探究AOP实现原理,首先定义几个类,一个Dao接口: 1 public interface Dao { 2 3 public void select(); 4 5 public void insert(); 6 7 } Dao接口的实现类DaoImpl: 1 public class DaoImpl implements Dao { 2 3 @Override 4 public void select() { 5 System.out.println("Enter DaoImpl.select()"); 6 } 7 8 @Override 9 public void insert() { 10 System.out.println("Enter DaoImpl.insert()"); 11 } 12 13 } 定义一个TimeHandler,用于方法调用前后打印时间,在AOP中,这扮演的是横切关注点的角色: 1 public class TimeHandler { 2 3 public void printTime() { 4 System.out.println("CurrentTime:" + System