- 浏览: 209582 次
- 性别:
- 来自: 上海
文章分类
- 全部博客 (196)
- Git (16)
- maven (8)
- Python (20)
- linux (14)
- java (30)
- spring (5)
- javascript (4)
- oracle (15)
- jquery (4)
- jbpm4.4 (4)
- ibatis (1)
- svn (1)
- sql server (1)
- sqoop (1)
- photoshop (2)
- 日常记录 (5)
- scala (1)
- IntelliJ IDEA (7)
- mysql (2)
- Hive (1)
- visual studio code (3)
- angularjs (5)
- nodejs (4)
- gradle (1)
- springboot (4)
- jakson (1)
- hibernate (2)
- 面试 (5)
- React (2)
- Kotlin (1)
- Netty (0)
- webstorm (2)
- spring cloud (4)
- redis (1)
- PowerDesigner (1)
- Vue (4)
- easyui (1)
- activiti (2)
- httpClient4.5 (2)
- logback (3)
- ngrinder (1)
- 分库分表 (1)
最新评论
-
严东军:
学习了,谢谢
摘录--DBMS_SCHEDULER -
zwllxs:
你知道你调的是谁的代码不?
jbpm4.4+ssh2 完整请假流程
《Spring参考手册》中定义了以下几个AOP的重要概念,结合以上代码分析如下:
•切面(Aspect) :
官方的抽象定义为“一个关注点的模块化,这个关注点可能会横切多个对象”,在本例中,“切面”就是类TestAspect所关注的具体行为,例如,AServiceImpl.barA()的调用就是切面TestAspect所关注的行为之一。“切面”在ApplicationContext中<aop:aspect>来配置。
•连接点(Joinpoint) :
程序执行过程中的某一行为,例如,AServiceImpl.barA()的调用或者BServiceImpl.barB(String _msg, int _type)抛出异常等行为。
•通知(Advice) :
“切面”对于某个“连接点”所产生的动作,例如,TestAspect中对com.spring.service包下所有类的方法进行日志记录的动作就是一个Advice。其中,一个“切面”可以包含多个“Advice”,例如TestAspect
•切入点(Pointcut) :
匹配连接点的断言,在AOP中通知和一个切入点表达式关联。例如,TestAspect中的所有通知所关注的连接点,都由切入点表达式execution(* com.spring.service.*.*(..))来决定
•目标对象(Target Object) :
被一个或者多个切面所通知的对象。例如,AServcieImpl和BServiceImpl,当然在实际运行时,Spring AOP采用代理实现,实际AOP操作的是TargetObject的代理对象。
•AOP代理(AOP Proxy)
在Spring AOP中有两种代理方式,JDK动态代理和CGLIB代理。默认情况下,TargetObject实现了接口时,则采用JDK动态代理,例如,AServiceImpl;反之,采用CGLIB代理,例如,BServiceImpl。强制使用CGLIB代理需要将 <aop:config> 的 proxy-target-class 属性设为true
通知(Advice)类型
•前置通知(Before advice) :在某连接点(JoinPoint)之前执行的通知,但这个通知不能阻止连接点前的执行。ApplicationContext中在<aop:aspect>里面使用<aop:before>元素进行声明。例如,TestAspect中的doBefore方法
•后通知(After advice) :当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。ApplicationContext中在<aop:aspect>里面使用<aop:after>元素进行声明。例如,TestAspect中的doAfter方法,所以AOPTest中调用BServiceImpl.barB抛出异常时,doAfter方法仍然执行
•返回后通知(After return advice) :在某连接点正常完成后执行的通知,不包括抛出异常的情况。ApplicationContext中在<aop:aspect>里面使用<after-returning>元素进行声明。
•环绕通知(Around advice) :包围一个连接点的通知,类似Web中Servlet规范中的Filter的doFilter方法。可以在方法的调用前后完成自定义的行为,也可以选择不执行。ApplicationContext中在<aop:aspect>里面使用<aop:around>元素进行声明。例如,TestAspect中的doAround方法。
•抛出异常后通知(After throwing advice) :
在方法抛出异常退出时执行的通知。 ApplicationContext中在<aop:aspect>里面使用<aop:after-throwing>元素进行声明。例如,TestAspect中的doThrowing方法。
切入点表达式
•通常情况下,表达式中使用”execution“就可以满足大部分的要求。表达式格式如下:
modifiers-pattern:方法的操作权限
ret-type-pattern:返回值
declaring-type-pattern:方法所在的包
name-pattern:方法名
parm-pattern:参数名
throws-pattern:异常
其中,除ret-type-pattern和name-pattern之外,其他都是可选的。上例中,execution(* com.spring.service.*.*(..))表示com.spring.service包下,返回值为任意类型;方法名任意;参数不作限制的所有方法。
•通知参数
可以通过args来绑定参数,这样就可以在通知(Advice)中访问具体参数了。例如,<aop:aspect>配置如下
TestAspect的doAfter方法中就可以访问msg参数,但这样以来AService中的barA()和BServiceImpl中的barB()就不再是连接点,因为execution(* com.spring.service.*.*(String,..))只配置第一个参数为String类型的方法。其中,doAfter方法定义如下:
访问当前的连接点
任何通知(Advice)方法可以将第一个参数定义为 org.aspectj.lang.JoinPoint 类型。JoinPoint 接口提供了一系列有用的方法, 比如 getArgs() (返回方法参数)、getThis() (返回代理对象)、getTarget() (返回目标)、getSignature() (返回正在被通知的方法相关信息)和 toString() (打印出正在被通知的方法的有用信息。
•切面(Aspect) :
官方的抽象定义为“一个关注点的模块化,这个关注点可能会横切多个对象”,在本例中,“切面”就是类TestAspect所关注的具体行为,例如,AServiceImpl.barA()的调用就是切面TestAspect所关注的行为之一。“切面”在ApplicationContext中<aop:aspect>来配置。
•连接点(Joinpoint) :
程序执行过程中的某一行为,例如,AServiceImpl.barA()的调用或者BServiceImpl.barB(String _msg, int _type)抛出异常等行为。
•通知(Advice) :
“切面”对于某个“连接点”所产生的动作,例如,TestAspect中对com.spring.service包下所有类的方法进行日志记录的动作就是一个Advice。其中,一个“切面”可以包含多个“Advice”,例如TestAspect
•切入点(Pointcut) :
匹配连接点的断言,在AOP中通知和一个切入点表达式关联。例如,TestAspect中的所有通知所关注的连接点,都由切入点表达式execution(* com.spring.service.*.*(..))来决定
•目标对象(Target Object) :
被一个或者多个切面所通知的对象。例如,AServcieImpl和BServiceImpl,当然在实际运行时,Spring AOP采用代理实现,实际AOP操作的是TargetObject的代理对象。
•AOP代理(AOP Proxy)
在Spring AOP中有两种代理方式,JDK动态代理和CGLIB代理。默认情况下,TargetObject实现了接口时,则采用JDK动态代理,例如,AServiceImpl;反之,采用CGLIB代理,例如,BServiceImpl。强制使用CGLIB代理需要将 <aop:config> 的 proxy-target-class 属性设为true
通知(Advice)类型
•前置通知(Before advice) :在某连接点(JoinPoint)之前执行的通知,但这个通知不能阻止连接点前的执行。ApplicationContext中在<aop:aspect>里面使用<aop:before>元素进行声明。例如,TestAspect中的doBefore方法
•后通知(After advice) :当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)。ApplicationContext中在<aop:aspect>里面使用<aop:after>元素进行声明。例如,TestAspect中的doAfter方法,所以AOPTest中调用BServiceImpl.barB抛出异常时,doAfter方法仍然执行
•返回后通知(After return advice) :在某连接点正常完成后执行的通知,不包括抛出异常的情况。ApplicationContext中在<aop:aspect>里面使用<after-returning>元素进行声明。
•环绕通知(Around advice) :包围一个连接点的通知,类似Web中Servlet规范中的Filter的doFilter方法。可以在方法的调用前后完成自定义的行为,也可以选择不执行。ApplicationContext中在<aop:aspect>里面使用<aop:around>元素进行声明。例如,TestAspect中的doAround方法。
•抛出异常后通知(After throwing advice) :
在方法抛出异常退出时执行的通知。 ApplicationContext中在<aop:aspect>里面使用<aop:after-throwing>元素进行声明。例如,TestAspect中的doThrowing方法。
切入点表达式
•通常情况下,表达式中使用”execution“就可以满足大部分的要求。表达式格式如下:
execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern) throws-pattern?)
modifiers-pattern:方法的操作权限
ret-type-pattern:返回值
declaring-type-pattern:方法所在的包
name-pattern:方法名
parm-pattern:参数名
throws-pattern:异常
其中,除ret-type-pattern和name-pattern之外,其他都是可选的。上例中,execution(* com.spring.service.*.*(..))表示com.spring.service包下,返回值为任意类型;方法名任意;参数不作限制的所有方法。
•通知参数
可以通过args来绑定参数,这样就可以在通知(Advice)中访问具体参数了。例如,<aop:aspect>配置如下
<aop:config> <aop:aspect id="TestAspect" ref="aspectBean"> <aop:pointcut id="businessService" expression="execution(* com.spring.service.*.*(String,..)) and args(msg,..)" /> <aop:after pointcut-ref="businessService" method="doAfter"/> </aop:aspect> </aop:config>
TestAspect的doAfter方法中就可以访问msg参数,但这样以来AService中的barA()和BServiceImpl中的barB()就不再是连接点,因为execution(* com.spring.service.*.*(String,..))只配置第一个参数为String类型的方法。其中,doAfter方法定义如下:
public void doAfter(JoinPoint jp,String msg)
访问当前的连接点
任何通知(Advice)方法可以将第一个参数定义为 org.aspectj.lang.JoinPoint 类型。JoinPoint 接口提供了一系列有用的方法, 比如 getArgs() (返回方法参数)、getThis() (返回代理对象)、getTarget() (返回目标)、getSignature() (返回正在被通知的方法相关信息)和 toString() (打印出正在被通知的方法的有用信息。
- springAOP.rar (7.6 MB)
- 下载次数: 36
发表评论
-
开源的 API 网关项目
2018-01-30 15:35 957微服务中的 API 网关(API Gateway) [url] ... -
生成文字图片
2018-01-20 11:05 539import javax.imageio.ImageI ... -
httpClient 上传附件
2018-01-16 10:48 1082import org.apache.http.Http ... -
使用jacob调用office组件将word转换为pdf
2018-01-10 10:02 351使用jacob调用office组件将word转换为pdf 只 ... -
JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解
2017-04-08 10:20 427JVM性能调优监控工具jps、jstack、jmap、jhat ... -
Failed to read schema document dubbo.xsd
2017-03-27 17:11 405http://blog.csdn.net/wxydaisy/a ... -
java优秀博文
2016-08-08 15:06 440java优秀博文: http://www.holl ... -
fastjson中遇到的坑
2016-06-12 16:35 974public static void main(String[ ... -
JSP中的EL表达式详细介绍
2016-05-10 13:40 367http://blog.csdn.net/meiyalei/a ... -
FastJson 测试用例
2016-05-10 13:37 600package jms.test; import ja ... -
解决sqoop将数据导入mysql乱码
2015-10-26 17:14 1362mysql 字符集修改: (5.5以前系统)#vim /etc ... -
linux tomcat java.lang.OutOfMemoryError
2013-09-18 15:42 812----------------------Linux下 ... -
转载:Apache+Tomcat集群配置负载均衡器
2012-02-09 14:52 1012主 题:Apache+Tomcat集群配置负载均衡器 ... -
java 图片裁剪
2011-11-10 10:54 943web开发,前段页面上传图片进行裁剪的实例 -
java安全6
2011-10-11 16:27 1123package com.ngsn.security; ... -
java安全5
2011-09-27 10:48 548package com.ngsn.security; ... -
java安全4
2011-09-27 10:47 565package com.ngsn.security; ... -
java安全3
2011-09-27 10:47 723package com.ngsn.security; ... -
java安全2
2011-09-27 10:46 848package com.ngsn.security; ... -
java安全1
2011-09-27 10:45 743package com.ngsn.security; ...
相关推荐
3.2 实例化Spring IoC容器 3.2.1 问题描述 3.2.2 解决方案 3.2.3 实现方法 3.3 解决构造器歧义 3.3.1 问题描述 3.3.2 解决方案 3.3.3 实现方法 第4章 高级Spring IoC...
Spring支持构造器注入、设值注入和接口注入三种方式,使得代码更加灵活和可测试。 回到这个资源,思维导图部分可能详细列出了Spring框架的基础结构,包括核心容器、数据访问/集成、Web模块、AOP模块和MVC模块。核心...
这个项目不仅包含了Spring MVC(模型-视图-控制器)架构,还整合了Struts,为开发者提供了深入理解Spring如何处理Web应用的宝贵实例。 1. Spring MVC:作为Spring框架的一部分,Spring MVC提供了一种用于构建Web...
Spring作为轻量级的IOC(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切面编程)容器,管理着应用中的对象。它通过依赖注入将对象的创建和依赖关系交由Spring管理,使得代码更加解耦...
【标题】"myeclipse+springmvc+spring+mybatis案例附带mysql数据库"是一个集成开发环境与流行Java企业级框架的实战项目,它涵盖了MyEclipse、Spring MVC、Spring和MyBatis四个核心组件,并结合了MySQL数据库,用于...
9. **Spring的单元测试**:Spring Test模块提供了对Spring应用的测试支持,包括ApplicationContext的加载、模拟对象以及AOP代理的处理,方便进行单元测试和集成测试。 10. **Spring的MVC测试**:Spring MVC Test...
此压缩包"spring-framework-5.0.2.RELEASE-中文注释版.zip"提供了Spring 5.0.2版本的源码,并且附带了详尽的中文注释,对于学习和理解Spring的工作原理及设计模式具有极大的帮助。 一、Spring概述 Spring作为一个...
这些源码实例覆盖了Spring框架的多个方面,包括IoC容器、AOP、数据访问和Web开发等。通过实际运行和调试,读者可以加深对Spring工作原理的理解,提升开发技能。 总的来说,《Spring In Action》第三版结合源码的...
综上所述,《Pro-Spring-5》是学习和精通Spring框架的宝贵资源,结合书中的实例和源代码,开发者可以逐步掌握Spring的核心概念和技术,提升自己的开发技能。对于初学者来说,书中的书签和清晰的解释将使学习过程更为...
2. **AOP(面向切面编程)**:Spring支持面向切面编程,允许开发者定义“切面”,这些切面可以插入到多个对象的方法中,实现如日志、事务管理和安全性等横切关注点。 3. **IoC容器**:Spring的IoC(Inversion of ...
2. **面向切面编程(Aspect-Oriented Programming, AOP)**:Spring提供了AOP支持,使得可以将关注点分离,如日志、事务管理等,从核心业务逻辑中解耦出来,实现代码的模块化和可重用性。 3. **Spring MVC**:...
Spring框架的AOP模块提供了一种声明式方式来实现横切关注点,如日志记录、安全控制等,无需修改业务代码即可添加这些非功能性需求。 ### 实战应用 #### 准备工作 在实际项目中使用Spring框架前,需要下载并配置...
综上所述,《Spring攻略第二版》不仅涵盖了Spring框架的基础知识,还深入介绍了其核心特性和应用场景,并通过丰富的实例帮助读者更好地理解和掌握Spring框架。无论是对于初学者还是有一定经验的开发者来说,这本书都...
Spring框架的核心是依赖注入(DI)和面向切面编程(AOP)。DI使得组件之间解耦,AOP则提供了模块化横切关注点的能力,如事务管理、日志等。 1. **Bean管理**:Spring通过XML配置或注解定义Bean,自动装配依赖。 2. ...
标题 "框架sprinigmvc4.1.6+spring4.1.6+hibernate4.1.7整合附带jar包" 提供的信息显示,这是一个关于集成Spring MVC、Spring和Hibernate的项目,版本分别为4.1.6和4.1.7。这三个框架在Java开发中扮演着核心角色,...
《Spring3.X企业应用开发实战》是一本深入探讨Spring框架在企业级应用中的实践方法的书籍,PDF扫描版提供了一种方便的电子阅读方式,同时附带的源码光盘则让读者能够动手实践书中所讲解的技术。这本书的核心是帮助...
1. 配置文件:包括Spring的XML配置文件,定义了Bean的实例化、依赖关系和AOP配置。 2. 控制器(Controller):实现了处理HTTP请求的Java类,通常使用注解如@RequestMapping来映射URL。 3. 服务层(Service):包含了...
在本项目中,我们利用Spring、SpringMVC和...综上所述,这个房地产交易管理系统是一个典型的Java Web应用实例,展示了Spring全家桶和MySQL数据库在实际项目中的应用,对于学习和理解企业级开发流程具有很高的参考价值。
《Spring宝典源码1》是一份珍贵的学习资源,它包含了Spring框架2.0版本的源代码,并且附带有详尽的注释和实例,旨在帮助开发者深入理解Spring的工作原理和应用方式。Spring作为Java企业级应用开发的重要框架,它的...