aop

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

Spring aop使用步骤及细节

穿精又带淫゛_ 提交于 2020-03-08 00:03:32
AOP使用步骤: 1)、导包 commons-logging-1.2.jar spring-aop-4.0.0.RELEASE.jar spring-beans-5.0.4.RELEASE.jar spring-context-5.0.4.RELEASE.jar spring-core-5.0.4.RELEASE.jar spring-expression-5.0.4.RELEASE.jar spring支持面向切面编程的包: spring-aspects-4.0.0.RELEASE.jar 基础版 加强版的面向对象编程 (即使目标对象没有实现任何接口也能创建动态代理): com.springsource.net.sf.cglib-2.2.0.jar com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar 2)、写配置 1、将目标类和切面类(封装了通知方法(在目标方法执行前后执行的方法))加入到IOC容器中 2、还应该告诉spring到底哪个是切面类 用@Aspect 3、告诉spring,切面类里面的每一个方法,都是合适何地运行; ```java * 告诉spring每个方法都什么时候运行 * * @Before :在执行目标方法之前运行

spring——AOP原理及源码(四)

﹥>﹥吖頭↗ 提交于 2020-03-07 20:04:40
前情回顾:    上文 我们一路分析了从容器创建开始直到我们的AOP注解导入的核心组件AnnotationAwareAspectJAutoProxyCreator执行postProcessBeforeInstantiation()方法的整个过程   分析得到: 在所有bean创建之前,都会调用resolveBeforeInstantiation方法来试图返回一个代理对象 本篇预告 下图可以看到resolveBeforeInstantiation方法包含了 applyBeanPostProcessorsBeforeInstantiation(targetType, beanName); applyBeanPostProcessorsAfterInitialization(bean, beanName); 两个方法 在本篇我们将完整走完 resolveBeforeInstantiation 全过程,并一直到返回代理对象为止 调试的起点    开始调试,还是一路跳到下一断点,直到AbstractAutoProxyCreator.postProcessBeforeInstantiation()(从resolveBeforeInstantiation方法进入到这里的过程上一篇已经分析了) 可以看到当前的bean为org.springframework.context.event

SSM配置文件

允我心安 提交于 2020-03-07 15:53:15
配置文件 1. pom.xml导jar包 junit包一定要4.12及以上 同时需导入,用来加载文件 < resources > < resource > < directory > src/main/java </ directory > < includes > < include > **/*.properties </ include > < include > **/*.xml </ include > </ includes > < filtering > false </ filtering > </ resource > < resource > < directory > src/main/resources </ directory > < includes > < include > **/*.properties </ include > < include > **/*.xml </ include > </ includes > < filtering > false </ filtering > </ resource > </ resources > 3. 逆向工程生成bean及mapper,分别放在bean及mapper下 每次生成mapper.xml,再挪动时一定记得修改namespace 4. bootstrap css框架

SSM学习之人力资源管理系统

血红的双手。 提交于 2020-03-07 13:53:25
原作者Github:https://github.com/GenshenWang/SSM_HRMS 配置文件 db.properties jdbc.driver=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql://localhost:3306/zl?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC jdbc.username=root jdbc.password=1870535196 Log4j.properties # Configure logging for testing: optionally with log file log4j.rootLogger=WARN, stdout # log4j.rootLogger=WARN, stdout, logfile log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n log4j.appender

IOC和AOP的简单理解

最后都变了- 提交于 2020-03-07 10:35:35
IOC控制反转 1 spring是个容器,就像是一个娃娃机。项目开始,我们将bean注入到这个容器中,通过注册,我们就可以使用已经注册的bean,在使用对象时,我们就不用去new xxx(); 而是直接xx.getbean(“xxx”); 在SSM整合后,使用注解开发则更为简单。 DI(依赖注入) 在笔者眼中,依赖注入和控制反转是一个相辅相成的概念,对于依赖注入简单来说,就是将类的属性、方法、依赖的对象,注入到已经在spring容器中注册的bean。 AOP(面向切面) 对于面向切面,笔者有以下简单理解,便于小白入门:先从一个简单的小故事引入。 所有人每天都要吃午饭,对于吃午饭这个事,我们可能想要一个更完美的流程,吃午饭前我们要洗手,吃午饭时候我们还想看电视,吃午饭后我们还想睡觉,吃午饭的时候,突然有人想要我们去玩游戏,我们应该还有有对待这个场景的解决方案。这听起来有点像装饰者模式。 上面的场景假设我们当前已经存在了吃午饭这个类,不能对其修改,那么我们就无法进行添加洗手、打游戏、睡觉、看电视等操作。这就很烦 但是对于Spring框架来说,研究人员为我们提供了AOP的思想和实现,使我们这个想法得以实现,并且完美整合到当下javaee项目开发流程中。 简单来说:代理就是将上面的吃午饭业务进行升华,可以在代理类中实现,吃午饭befor去洗手,after睡觉,中途去完,吃饭时看电视等操作。

spring源码学习之AOP(一)

谁说胖子不能爱 提交于 2020-03-07 08:20:18
  继续源码学习,看了spring中基础的容器和AOP感觉自己也没有什么长进,哈哈,我也不知道到底有用没有,这可能是培养自己的一种精神吧,不管那么多,继续学习!AOP中 AOP中几个重要的概念: (1)Advice--通知 Advice定义在连接点做什么,为切面增强提供织入接口。在spring中,他主要描述spring AOP围绕方法调用而注入的切面行为。在spring AOP的实现中,使用了AOP联盟定义的统一接口--Advice接口并通过这个接口,为AOP切面的增强的织入功能做了更多的细话和扩展 (2)PonitCut--切点 PonitCut(切点)决定Advice通知应该作用于哪个连接点,也就是说通过PonitCut来定义需要增强的方法的集合。这些集合的选取可以按照一定的规则来完成。这种情况下,PonitCut通常意味着标识方法,例如,这些需要增强的地方可以由某个正则表达式进行标识,或根据某个方法名进行匹配 (3)Advisor--通知器 完成对目标方法的切面增强设计(Advice)和关注点的设计(PointCut)以后,需要一个对象把它们结合起来,完成这个作用的就是Advisor,通过Advisor,可以定义在应该使用哪个通知并在哪个关注点使用它,也就是说通过Advisor,把Advice和PointCut结合起来,这个结合为使用IoC容器配置AOP应用

Spring与Hibernate集成、Spring与Struts2集成

江枫思渺然 提交于 2020-03-06 22:03:34
SSH架构的原始配置 准备工作:新建一个纯的JavaWeb项目(命名为ssh)   (1)新建resources资源目录,新建webapp目录(webapp下新建lib目录,classes目录,以及 web.xml 文件)   (2)对项目ssh做buildpath,选择classes为字节码文件存放目录   (3)resources资源目录下复制db.properties文件和applicationContext.xml文件 1 #key-value 2 jdbc.driverClassName=com.mysql.jdbc.Driver 3 jdbc.url=jdbc:mysql://localhost:3306/springDemo 4 jdbc.username=root 5 jdbc.password=admin 6 jdbc.maxActive=5 db.properties 第一部分:Spring与Hibernate集成: 1.导入相关jar包   (1)导入Hibernate相关的jar包:如下图所示,出去红色方框外的都为\hibernate-release-4.3.5.Final\lib\required下的所有包   (2)导入spring相关jar包:包括libs中的包和依赖包   (3)导入 mysql驱动包 和阿里巴巴的 数据库连接池包druid包   

Spring 集成 JOTM 的 JTA 事务管理

时光总嘲笑我的痴心妄想 提交于 2020-03-06 15:56:29
Spring 中集成 JOTM 配置 JTA 事务: 假如业务中要用到多个数据库,我们希望在业务方法中,当对某一个数据库的数据表进行操作的事务失败并回退(rollback),另外某一个数据库的数据表的操作事务也要回退,但应用一般的事务管理达不到这样的事务管理效果,这就需要实现 JTA 事务管理了。 这里我们在SPring中集成 Object web 的一个开源JTA实现JOTM (可以在 http://jotm.objectweb.org 下载完整版) 来实现JTA事务管理。 1、将必须的类包放入类路径中: jotm.jar, xapool.jar, jotm_jrmp_stubs.jar, jta-spect1_0_1.jar, connector-1_5.jar等等。 2、编写JOTM配置文件carol.properties,将其放到类路径下: Java代码 #JNDI调用协议 carol.protocols=jrmp #不使用CAROL JNDI封装器 carol.start.jndi= false #不启动命名服务器 carol.start.ns= false #JNDI调用协议 carol.protocols=jrmp #不使用CAROL JNDI封装器 carol.start.jndi=false #不启动命名服务器 carol.start.ns=false 3

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