- 浏览: 4866 次
文章分类
- 全部博客 (6)
- oracle (2)
- slf4j/log4j/perf4j (1)
- struts2 (0)
- spring (1)
- mybatis (0)
- jquery (0)
- Javamelody (1)
- quartz (1)
- spider (0)
- maven (0)
- webservice (0)
- easyui (0)
- zxing (0)
- 事物 (0)
- 替换 (0)
- 面向对象基础 (0)
- android (0)
- ant (0)
- keytool (0)
- shell脚本 (0)
- xml (0)
- 配置文件 (0)
- dom4j 解析xml文件 (0)
- tomcat (0)
- 普通项目 web项目 (0)
- FileWriter bufferedWriter (0)
- android 更换图片 (0)
- linux 发布 部署 (0)
- java 递归删除一个文件夹及下面的所有文件 (0)
- 复制文件夹、修改文件夹名、替换文件内容、重写文件、删除文件 (0)
- zip4j (0)
- 端口,进程 (0)
- web项目,maven (0)
- spring ,jar包 (0)
- druid 线程池 (0)
- druid,访问权限 (0)
- log4j 搭建日志环境 (0)
- mysql 没启动,出现错误 (0)
- cxf 拦截器 (0)
- 重定向和转发 (0)
- easyui 日期控件 (0)
- spring标签 (0)
- jstl标签 c:forEach (0)
- springMVC 强转 日期类型 (0)
- springMVC,easyui-datebox (0)
- springMVC @ModelAttribute (0)
- html (0)
- maven 出现红色感叹号 (0)
- jstl 格式化 (0)
- springMVC标签,easyui ,后台springMVC (0)
- 上传照片,预览照片 (0)
- springMVC 基础知识 (0)
- sql server (0)
- js (0)
- jsp (0)
- pageEncoding (0)
- contentType (0)
- to_date() (0)
- to_char() (0)
- oracle,跨数据库或者跨用户使用 (0)
- jsp语法 (0)
- 快捷键 (0)
- java (0)
- plsql (0)
- jquery的常见操作 (0)
- egit的一些常见操作 (0)
- memcache,spring (0)
- redis (0)
- 设计模式 (0)
- java 多态性 (0)
- uml (0)
- 分别通过后台和数据库进行计算时长 (0)
- springmvc显示图片 (0)
- mybatis 缓存问题 (0)
- jsp 路径 (0)
- picbox (0)
- el表达式 (0)
- modelAttribute (0)
- sessionAttribute (0)
- contextAttribute (0)
- java静态变量 (0)
- springMVC 上传 下载 (0)
- springMVC 多选框 (0)
- servlet (0)
- web (0)
- 时间间隔 (0)
- Integer.valueOf() (0)
- split (0)
- StringTokener (0)
- springMVC (0)
- radiobuttons (0)
- treeset (0)
- comparable,comparator (0)
- 高并发 (0)
- ibatis (0)
- url重写 (0)
- 当你在浏览器输入一个网址,如http://www.dy1280.com,按回车之后发生了什么? (0)
- 存储过程 (0)
最新评论
spring aop理解
- 博客分类:
- spring
1、通知(Advice):就是你想实现的功能,如日志、事务、安全等。先定义好,然后在想用的地方用一下。
2、连接点(joinpoint):和方法有关的前前后后、抛出异常都是连接点。
3、切入点(pointcut):用来筛选连接点,选出想要使用连接点的方法。
4、切面(aspect):切面是通知和切入点的结合。通知说明了干什么和什么时候干;切入点说明了在哪干(指定到底是哪个方法)。
5、引入(introduction):向现有的类中添加新方法属性。就是把切面用到目标类中。
6、目标(target):真正的业务逻辑。他可以在毫不知情的情况下,被织如切面,而自己专注于业务逻辑。
7、织入(waving):把代理应用到目标对象来生成新的代理对象的过程。
8、aop原理;spring用代理类包裹切面,把他们织入到spring管理的bean中。也就是让代理类伪装成目标类,它会截取对目标类中方法的调用,让调用者对目标类的调用都先变成调用伪装类,伪装类中就先执行了切面,再把调用转发给真正的目标bean。
1.实现和目标类相同的接口,我也实现和你一样的接口,反正上层都是接口级别的调用,这样我就伪装成了和目标类一样的类(实现了同一接口,咱是兄弟了),也就逃过了类型检查,到java运行期的时候,利用多态的后期绑定(所以spring采用运行时),伪装类(代理类)就变成了接口的真正实现,而他里面包裹了真实的那个目标类,最后实现具体功能的还是目标类,只不过伪装类在之前干了点事情(写日志,安全检查,事物等)。
这就好比,一个人让你办件事,每次这个时候,你弟弟就会先出来,当然他分不出来了,以为是你,你这个弟弟虽然办不了这事,但是他知道你能办,所以就答应下来了,并且收了点礼物(写日志),收完礼物了,给把事给人家办了啊,所以你弟弟又找你这个哥哥来了,最后把这是办了的还是你自己。但是你自己并不知道你弟弟已经收礼物了,你只是专心把这件事情做好。
顺着这个思路想,要是本身这个类就没实现一个接口呢,你怎么伪装我,我就压根没有机会让你搞出这个双胞胎的弟弟,那么就用第2种代理方式,创建一个目标类的子类,生个儿子,让儿子伪装我
2.生成子类调用,这次用子类来做为伪装类,当然这样也能逃过JVM的强类型检查,我继承的吗,当然查不出来了,子类重写了目标类的所有方法,当然在这些重写的方法中,不仅实现了目标类的功能,还在这些功能之前,实现了一些其他的(写日志,安全检查,事物等)。
这次的对比就是,儿子先从爸爸那把本事都学会了,所有人都找儿子办事情,但是儿子每次办和爸爸同样的事之前,都要收点小礼物(写日志),然后才去办真正的事。当然爸爸是不知道儿子这么干的了。这里就有件事情要说,某些本事是爸爸独有的(final的),儿子学不了,学不了就办不了这件事,办不了这个事情,自然就不能收人家礼了。
前一种兄弟模式,spring会使用JDK的java.lang.reflect.Proxy类,它允许Spring动态生成一个新类来实现必要的接口,织入通知,并且把对这些接口的任何调用都转发到目标类。
后一种父子模式,spring使用CGLIB库生成目标类的一个子类,在创建这个子类的时候,spring织入通知,并且把对这个子类的调用委托到目标类。
相比之下,还是兄弟模式好些,他能更好的实现松耦合,尤其在今天都高喊着面向接口编程的情况下,父子模式只是在没有实现接口的时候,也能织入通知,应当做一种例外。
引自http://blog.csdn.net/lvshow/article/details/8628012
2、连接点(joinpoint):和方法有关的前前后后、抛出异常都是连接点。
3、切入点(pointcut):用来筛选连接点,选出想要使用连接点的方法。
4、切面(aspect):切面是通知和切入点的结合。通知说明了干什么和什么时候干;切入点说明了在哪干(指定到底是哪个方法)。
5、引入(introduction):向现有的类中添加新方法属性。就是把切面用到目标类中。
6、目标(target):真正的业务逻辑。他可以在毫不知情的情况下,被织如切面,而自己专注于业务逻辑。
7、织入(waving):把代理应用到目标对象来生成新的代理对象的过程。
8、aop原理;spring用代理类包裹切面,把他们织入到spring管理的bean中。也就是让代理类伪装成目标类,它会截取对目标类中方法的调用,让调用者对目标类的调用都先变成调用伪装类,伪装类中就先执行了切面,再把调用转发给真正的目标bean。
1.实现和目标类相同的接口,我也实现和你一样的接口,反正上层都是接口级别的调用,这样我就伪装成了和目标类一样的类(实现了同一接口,咱是兄弟了),也就逃过了类型检查,到java运行期的时候,利用多态的后期绑定(所以spring采用运行时),伪装类(代理类)就变成了接口的真正实现,而他里面包裹了真实的那个目标类,最后实现具体功能的还是目标类,只不过伪装类在之前干了点事情(写日志,安全检查,事物等)。
这就好比,一个人让你办件事,每次这个时候,你弟弟就会先出来,当然他分不出来了,以为是你,你这个弟弟虽然办不了这事,但是他知道你能办,所以就答应下来了,并且收了点礼物(写日志),收完礼物了,给把事给人家办了啊,所以你弟弟又找你这个哥哥来了,最后把这是办了的还是你自己。但是你自己并不知道你弟弟已经收礼物了,你只是专心把这件事情做好。
顺着这个思路想,要是本身这个类就没实现一个接口呢,你怎么伪装我,我就压根没有机会让你搞出这个双胞胎的弟弟,那么就用第2种代理方式,创建一个目标类的子类,生个儿子,让儿子伪装我
2.生成子类调用,这次用子类来做为伪装类,当然这样也能逃过JVM的强类型检查,我继承的吗,当然查不出来了,子类重写了目标类的所有方法,当然在这些重写的方法中,不仅实现了目标类的功能,还在这些功能之前,实现了一些其他的(写日志,安全检查,事物等)。
这次的对比就是,儿子先从爸爸那把本事都学会了,所有人都找儿子办事情,但是儿子每次办和爸爸同样的事之前,都要收点小礼物(写日志),然后才去办真正的事。当然爸爸是不知道儿子这么干的了。这里就有件事情要说,某些本事是爸爸独有的(final的),儿子学不了,学不了就办不了这件事,办不了这个事情,自然就不能收人家礼了。
前一种兄弟模式,spring会使用JDK的java.lang.reflect.Proxy类,它允许Spring动态生成一个新类来实现必要的接口,织入通知,并且把对这些接口的任何调用都转发到目标类。
后一种父子模式,spring使用CGLIB库生成目标类的一个子类,在创建这个子类的时候,spring织入通知,并且把对这个子类的调用委托到目标类。
相比之下,还是兄弟模式好些,他能更好的实现松耦合,尤其在今天都高喊着面向接口编程的情况下,父子模式只是在没有实现接口的时候,也能织入通知,应当做一种例外。
引自http://blog.csdn.net/lvshow/article/details/8628012
发表评论
文章已被作者锁定,不允许评论。
相关推荐
本示例将简要介绍如何在Spring应用中实现AOP,通过实际的代码示例帮助理解其工作原理。 首先,我们要理解AOP的核心概念。AOP是一种编程范式,它允许开发者定义“切面”(Aspects),这些切面封装了特定的关注点,如...
首先,我们需要理解Spring AOP的基础概念。AOP的核心是切点(Pointcut),它定义了关注点在何处应用。在Spring中,我们通常使用表达式或者注解来定义切点。例如,我们可以使用`@Before`、`@After`、`@Around`、`@...
现在,我们回到主题——"springaop依赖的jar包"。在Spring 2.5.6版本中,使用Spring AOP通常需要以下核心jar包: - `spring-aop.jar`:这是Spring AOP的核心库,包含了AOP相关的类和接口。 - `spring-beans.jar`:...
在深入理解 Spring AOP 的源码时,需要熟悉 Spring IoC 的工作原理,以及 AOP 相关的概念,如切点表达式、通知类型等。了解这些基础知识可以帮助我们更好地掌握 Spring AOP 的实现细节。在分析源码时,可以参考作者...
接下来,我们通过一个简单的Spring AOP示例来加深对上述概念的理解。假设我们需要在调用某个公共方法前记录日志,我们可以定义一个`BeforeAdvice`,并在目标方法上应用此通知。 ```java package com.example.aop; ...
**Spring AOP 实现机制详解** Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许程序员在不修改源代码的...通过深入理解Spring AOP的实现机制,我们可以更好地利用这一强大的工具,优化我们的应用程序。
Spring AOP,即Spring的面向切面编程模块,是Spring框架的重要组成部分,它允许开发者在不修改源代码的情况下,对程序进行横切关注点的处理,如日志、事务管理等。实现这一功能,主要依赖于三个核心的jar包:aop...
1. **概念理解**:AOP 是一种编程范式,它将关注点分离,让通用的横切关注点(如日志、事务管理)与业务逻辑解耦。在 Spring 中,切面可以通过注解或 XML 配置定义。 2. **通知类型**:包括前置通知(Before)、...
SpringAOP(面向切面编程)是Spring框架的一个关键组件,它允许开发者通过定义切面来统一处理横切关注点,比如日志、安全等。它与AspectJ一样,目标是为了处理横切业务,但实现方式有所区别。AspectJ是一种更全面的AOP...
在`springAop1`这个压缩包中,可能包含了一个简单的应用示例,展示了如何定义一个切面类,以及如何在该类中定义通知方法。例如,我们可能会看到一个名为`LoggingAspect`的类,其中包含了`@Before`注解的方法,用于在...
Spring AOP,即Spring的面向切面编程模块,是Spring框架的重要组成部分,它提供了一种在不修改源代码的情况下对程序进行扩展和增强的方法...正确理解和使用这些jar包,将能更好地利用Spring AOP实现应用的解耦和扩展。
通过深入理解并熟练运用Spring AOP,开发者可以编写更加模块化、可维护的代码,减少重复的工作,并提高系统的整体设计质量。在实际项目中,结合源码阅读和相关工具,能进一步提升对Spring AOP的掌握和运用水平。
**Spring AOP 概念理解** Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的一个重要组成部分,它允许我们通过定义“切面”来模块化横切关注点,比如日志、事务管理、性能监控等。在传统的...
在讨论Spring AOP(面向切面编程)时,首先需要理解几个核心概念。Spring AOP 是Spring框架提供的一个功能模块,它允许开发者将横切关注点(cross-cutting concerns)从业务逻辑中解耦出来,通过在方法调用前后进行...
Spring框架是Java开发中不可或缺的一部分,它主要由两个核心组件构成:IoC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)。本笔记将深入探讨这两个概念以及它们在Spring中...
在IT领域,Spring框架是一个广泛使用的Java应用框架,它提供了许多功能,包括依赖注入、面向切面编程(AOP)等。"spring-aop-jar"这个主题涉及到Spring框架中的核心组件之一——Spring AOP。这里我们将深入探讨...
本篇文章将深入探讨如何使用Spring AOP实现性能监控器,并通过源码分析来理解其工作原理。 首先,我们要了解AOP的核心概念——切面(Aspect)、通知(Advice)、连接点(Join Point)、切入点(Pointcut)和织入...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许程序员在不修改源代码的情况下,对应用程序的特定部分(如方法调用)进行拦截和...理解并掌握Spring AOP的使用,对于提升Spring框架的应用能力至关重要。
首先,我们需要理解Spring AOP的核心概念。切面(Aspect)是关注点的模块化,这些关注点定义了跨越多个对象的行为或责任。切点(Join Point)是程序执行中的特定点,如方法调用或异常处理。通知(Advice)是在特定...
Spring AOP,全称为Aspect Oriented Programming,是Spring框架中的一个重要模块,主要负责处理系统中的...文件"5.SpringAOP_01"和"6.SpringAOP_02"很可能是课程的分阶段内容,涵盖了从基础概念到进阶实践的详细讲解。