切面

AOP和spring AOP学习记录

我与影子孤独终老i 提交于 2020-03-09 16:10:45
AOP基本概念的理解 面向切面AOP主要是在编译期或运行时,对程序进行织入,实现代理, 对原代码毫无侵入性,不破坏主要业务逻辑,减少程序的耦合度。 主要应用范围: 日志记录,性能统计,安全控制,事务处理,异常处理等等 名词性概念 切面(Aspect) 通常是一个类,在里面可以定义切入点和通知,即 切面=切入点+通知 。 连接点(Joint Point) 被拦截到的点,因为 Spring 只支持方法类型的连接点,所以在 Spring 中连接点指的就是被拦截的到的方法,实际上连接点还可以是字段或者构造器。 切入点(Pointcut) 对连接点进行拦截的定义。 通知(Advice) 拦截到连接点之后所要执行的代码,通知分为前置、后置、异常、最终、环绕通知五类。 AOP 代理 AOP 框架创建的对象,代理就是目标对象的加强。Spring 中的 AOP 代理可以使 JDK 动态代理,也可以是 CGLIB 代理,前者基于接口,后者基于子类。 织入 (Weaving) 把切面加入到对象,并创建出代理对象的过程。 动态代理 在运行期间生成对象进行代理, spring AOP就是动态代理。 静态代理 自己编写代理对象,在编译器织入, AspectJ就是在编译期间进行织入,从而减少对运行时效率的影响。 SpringAOP 根据对象是否是实现类选择代理的方法 如果要代理的对象实现了接口,spring

Spring MVC

☆樱花仙子☆ 提交于 2020-03-09 05:00:55
Spring IOC/DI IOC:控制反转(Inverse Of Control) DI:依赖注入(Dependency Injection) Spring是一个基于IOC和AOP的结构J2EE系统的框架 IOC 反转控制 是Spring的基础,Inversion Of Control 简单说就是创建对象由以前的程序员自己new 构造方法来调用,变成了交由Spring创建对象 DI 依赖注入 Dependency Inject. 简单地说就是拿到的对象的属性,已经被注入好相关值了,直接使用即可。 AOP AOP 即 Aspect Oriented Program 面向切面编程 首先,在面向切面编程的思想里面,把功能分为核心业务功能,和周边功能。 所谓的核心业务,比如登陆,增加数据,删除数据都叫核心业务 所谓的周边功能,比如性能统计,日志,事务管理等等 周边功能在Spring的面向切面编程AOP思想里,即被定义为切面 在面向切面编程AOP的思想里面,核心业务功能和切面功能分别独立进行开发 注解 拦截器 来源: CSDN 作者: 冰原狼 链接: https://blog.csdn.net/qq_38025939/article/details/104719822

Spring中的AOP是什么?

旧时模样 提交于 2020-03-08 23:12:29
AOP :面向切面编程 在软件工程领域有一个概念: 关注点分离 ,不同的问题交给不同的部分去解决。 AOP其实就是这个思想。 怎么理解呢? 例如我们写业务代码的时候还需要考虑日志、缓存..等通用的功能。这些通用功能的实现就是所谓的切面( Aspect ),当业务代码和切面代码分离之后,开发者即可专注于业务逻辑处理,架构将变得高内聚低耦合。但是最终你编写的业务代码是需要这些被剥离出来的通用功能,又需要合在一起,这个过程就是切面被合并到业务中,这被称为 Weave。 如何织如呢? 涉及AOP的技术 1、 编译时织入 2、类加载时织入 3、运行时织入:spring采用此种方式,通过动态代理的方式,实现简单。 来源: CSDN 作者: MyySophia 链接: https://blog.csdn.net/MyySophia/article/details/104739884

Spring AOP

天大地大妈咪最大 提交于 2020-03-08 10:36:49
AOP AOP(Aspect Oriented Programming 面向切面编程)是一种通过运行期动态代理实现代码复用的机制,是对传统OOP(Object Oriented Programming,面向对象编程 )的补充。 AOP的作用 在OOP中,正是这种分散在各处且与对象核心功能无关的代码(横切代码)的存在,使得模块复用难度增加。AOP则将封装好的对象剖开,找出其中对多个对象产生影响的公共行为,并将其封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),切面将那些与业务无关,却被业务模块共同调用的逻辑提取并封装起来, 减少了系统中的重复代码 , 降低了模块间的耦合度 , 同时提高了系统的可维护性 。 实现AOP 1、添加jar类库 2、Spring配置文件添加< aop:aspectj-autoproxy/>,该配置作用:如果创建目标对象的目标类中的方法与AspectJ切面中切入点表达式匹配,则自动为该目标对象生成动态代理对象, 3、自定义一个@Aspect修饰的切面类——>将其创建的对象保存于Spring IOC容器——>自定义增强方法,增强方法也称为通知方法,指有@Before、@AfterRunning、@AfterThrowing、@After或@Around注解修饰的Java方法。 代码如下: package com.jd.aop ; import

Spring中AOP的理解

岁酱吖の 提交于 2020-03-08 07:49:36
1.AOP的概念 AOP(AspectOriented Programming,面向切面编程)指的是可以通过预编译方式和运行期动态代理实现在不修改源代码的情况下个程序动态统一添加功能的一种技术。AOP提供从一个角度来考虑程序结构以完善面向对象编程。它为开发人员提供了一种描述横切关注点的机制,并能够自动将横向关注点入到面向对象的软件系统中,从而实现了横切关注点模块化 AOP一般用于实现那些与业务无关,但是业务模块所共同调用的逻辑,例如异常拦截、事务管理、日志管理和权限控制等,AOP将这些代码封装起来,有利于减少系统的重复代码,降低模块间耦合度,提供可维护性。 AOP的基本概念:Aspect(切面):一个关注点的模块化,这个关注点可能会横切多个对象;Joinpoint(连接点):程序执行过程中某个特定的点,比如处理异常的时候;Advice(通知):在切面的某个特定连接点上执行的操作;Pointcut(切入点):匹配连接点的断言;Introduction(引入):用来给一个类型声明额外的方法和属性;Target Object(目标对象):被一个或多个切面所统治的对象;Weaving(织入):被切面连接到其他应用程序类型或对象上,并创建被通知的对象。 2.AOP的实现原理 AOP的核心实现与IoC一样依赖于 Java 的反射机制,但是与IoC不同的地方是,IoC用到的相关设计模式是工程模式

Spring 过滤器 拦截器 AOP区别

旧时模样 提交于 2020-03-08 00:46:25
https://blog.csdn.net/dreamwbt/article/details/82658842 简介 这几天在回顾Spring的AOP时,对过滤器,拦截器,AOP的关系有点好奇,故记录做以备份。在实现一些公共逻辑的时候,很多功能通过过滤器,拦截器,AOP都能实现,但是不同的方式有不同的效率。具体有什么区别,看下文描述。 过滤器 过滤器拦截的是URL Spring中自定义过滤器(Filter)一般只有一个方法,返回值是void,当请求到达web容器时,会探测当前请求地址是否配置有过滤器,有则调用该过滤器的方法(可能会有多个过滤器),然后才调用真实的业务逻辑,至此过滤器任务完成。 过滤器并没有定义业务逻辑执行前、后等,仅仅是请求到达就执行。 特别注意:过滤器方法的入参有request,response,FilterChain,其中FilterChain是过滤器链,使用比较简单,而request,response则关联到请求流程,因此可以对请求参数做过滤和修改,同时FilterChain过滤链执行完,并且完成业务流程后,会返回到过滤器,此时也可以对请求的返回数据做处理。 拦截器 拦截器拦截的是URL 拦截器有三个方法,相对于过滤器更加细致,有被拦截逻辑执行前、后等。Spring中拦截器有三个方法:preHandle,postHandle,afterCompletion

AOP、Http拦截器的使用

♀尐吖头ヾ 提交于 2020-03-06 11:36:33
切面的使用【自定义注解 AOP 拦截器】 我的开发过程中遇到大量的日志输出,统一处理方式,这种统一处理,或者日志输出,如果不使用切面等处理方式很容易造成代码冗余,看着很乱。 把一个个的横切关注点放到某个模块中去,称之为切面。那么每一个的切面都能影响业务的某一种功能,切面的目的就是功能增强,如日志切面就是一个横切关注点,应用中许多方法需要日志记录的只需要插入日志的切面即可。 AOP术语 Joinpoint:连接点,被拦截到需要被增强的方法。 Pointcut:切入点,哪些包中的哪些类中的哪些方法,可认为是连接点的集合。 Advice:增强,当拦截到Joinpoint之后,在方法执行的什么时机(when)做什么样(what)的增强。根据时机分为:前置增强、后置增强、异常增强、最终增强、环绕增强 Aspect:切面,Pointcut+Advice,去哪些地方+在什么时机+做什么增强 Target:目标对象,被代理的目标对象 weaving:织入,把Advice加到Target上之后,创建出Proxy对象的过程 Proxy:一个类被AOP织入增强后,产生的代理类 创建切面 @Aspect @Component public class AspectDoPost { //切面位置:所有controller下的请求【一般打印日志使用】 @Pointcut("execution(* com

Spring3

不羁的心 提交于 2020-03-05 07:03:54
spring aop 面向切面编程,核心动态代理 一、切面和切点的概念: 以一个用户service为例子,如果说所有的方法都要增强,我们可以说是面向切面,如果说针对某些方法,那么可以说是切点。 自动生成代理【面向切面】: 自动生成代理,采用通配符的形式,要求在代理目标命名时要统一化。 test test2 注意:调用时只需要使用spring中配置目标本身的bean name 生成切点代理【面向切点】: 二、spring中的AspectJ的切面开发 自定义一个通知类,里面写上相应的通知方法: Around 环绕 Before 前置 After 后置 Throws 异常等等 ps:如果是环绕通知,要传递参数ProceedingJoinPoint对象 spring中配置: aop:config <aop:aspect ref=“myAdvice”> <aop:pointcut expression=“execution(* dao. . (…))” id=“point_cut”/> <!-- 在指定的切点上做指定的事情 --> <!-- 指定的切点用pointcut-ref属性来引用 --> <!-- 做的具体事情用method属性来指定 --> <!-- aop:before前置通知 --> <aop:before method="doBefore" pointcut-ref=

AOP面试知识整理,^_^-包括spring Aop

妖精的绣舞 提交于 2020-03-04 23:50:07
讲到java企业级开发框架,就不可避免的讲到 IOC,AOP,MCV   今天面试时被问到AOP,讲的很乱,这里整理笔记,包括AOP,spring-AOP的部分知识,错误的地方请小伙伴指出来. 谈谈你对AOP的理解: AOP概念(Aspect-Oriented Programming): 即面向切面编程,与OOP(Object - Oriented Programming,面向对象编程)相辅相成,AOP的基本单元为Aspect(切面),Struts2 的拦截器设计就是基于AOP的思想。 AOP原理: 大型系统中的 通用的服务型的代码会穿插在各个业务类 ,方法中,随着系统规模的增大,会造成 大量的代码重复 ,,且与核心代码没有太多的关系。 系统中的业务可分为 核心关注点和横切关注点 , 核心关注点是业务处理的主要流程,横切关注点是与核心业务无关的通用业务。如日志权限 等,各个横切点离散的穿插与核心业务中。导致系统中的每一个模块代码都与这些业务具有很强的依赖性,当需要添加横切功能时,需要大幅修改已有的代码。 AOP即解决这个问题, 使用AOP框架,能够将这些影响多个类的通用性服务抽取出来,(即切面) ,并通过 配置的方式明确在那些位置插入这些服务, 系统运行后,AOP框架在指定的时机自动运行这些服务,从而达到核心业务逻辑和服务性逻辑分离的目的,减少了重复代码的

Spring AOP动态代理-通知

时光毁灭记忆、已成空白 提交于 2020-03-01 03:50:29
在上一篇中,我们用JDK动态代理和CgLib实现了例子中的业务逻辑。那么如果用Spring,如何实现呢? 上一篇: http://my.oschina.net/lfy2008/blog/663999 我们依然有上一章的原材料: 业务逻辑接口:TakingTrain 实现类:TakingTrainImpl 增强的横切逻辑:CheckTicket spring中的相关概念 增强的横切逻辑:Advice 增强类型可以分为: 前置增强:BeforeAdvice 后置增强:AfterRunningAdvice 环绕增强:MethodInterceptor 异常抛出增强:ThrowsAdvice(哈哈,现在是不是可以自己用它来控制事物) 引介增强:IntroductionInterceptor CheckTicket的改造: 我们知道,CheckTicket中的方法调是在在TakingTrain的方法之前。那么,我们可以让CheckTicket实现前置增强的接口: public class CheckTicketAdvice implements MethodBeforeAdvice{ @Override public void before(Method method, Object[] args, Object target) throws Throwable { System.out