Spring 2 AOP

扩增子分析|基于零模型的群落确定性和随机性构建过程——R实战 周集中教授团队多年在群落确定性和随机性过程深耕,于2017年总结出来下述图表中的计算路径,广受生态领域研究者的推崇。本文基于该计算路径,梳理了整理了邓晔老师组的代码,通过一个实例演示了计算过程和结果。 阅读详情
在结束了上一篇 Spring 1.x中AOP的使用之后,我又马不停蹄的打开 Eclipse,做着 Spring2.X下了 AOP的 Sample。在上一篇文章中的配置过程中,由于对自动代理不是很熟,出现了循环引用的异常信息。当初在阅读 PicoContainer源码时看到循环引用不以为然,后来在学习 AspectJ时小有印象,这次在折腾了半个多小时后可加深了印象。

        好啦,闲言少叙,奔向文本的主题吧。和Spring1.X相比,Spring2.X使用AspectJ的语法来声明AOP,这使得它更“标准”,更灵活了。还是那句话,如果你不了解AspectJ并且打算使用Spring2.X的AspectJ式AOP,那就学学AspectJ吧,这方面的书还是很多了。

        Spring2.X下的切面有两种实现方式,一种是以Java文件定义切面(其只是普通的Java类),然后在配置文件中声明定义的切面;另一种是在Java类中引入和AOP相关的元数据(注释)。

        先介绍第一种配置方式。需要指出的是,Spring2.X的beans名称空间和Spring1.X有所不同,它采用了Schema而不是DTD(也可采用DTD方式,具体的请参考文档)。还是引入毫无意义的日志切面,定义的切面类LogingAspect 如下:


public   class  LogingAspect {

public   void  logMethod(JoinPoint jp){

        System.err.println(jp.getTarget().getClass());

        System.err.println(jp.getSignature().getName());

}

}

        同时在配置文件中如下配置:


< bean id = " logAspectTarget "   class = " hibernatesample.service.util.LogingAspect " ></ bean >

< aop:config >

< aop:aspect id = " logAspect "  ref = " logAspectTarget " >

< aop:pointcut id = " businessService "  expression = " execution(* hibernatesample.service.*.*(..)) " />

< aop:after pointcut - ref = " businessService "  method = " logMethod " />

</ aop:aspect >

</ aop:config >

       对于上面的切面,切入点businessService是在配置文件中声明的,其表达式采用了 AspectJ的语法,LogingAspect 类中logMethod(JoinPoint jp)方法根据配置文件信息可知其是after通知,方法的JoinPoint参数不是必须的,它是来自于AspectJ的实用类,这里用它不过输出一些和连接点有关的信息。当然,在Spring2.X中,切入点和通知能更灵活的使用,我们可以如AspectJ一样传递参数给通知。如果需要在Service中引入事务功能,需要如下配置事务通知:


< tx:advice id = " txAdvice "  transaction - manager = " transactionManager " >

< tx:attributes >

< tx:method name = " get* "  read - only = " true " />

< tx:method name = " find* "  read - only = " true " />

< tx:method name = " * " />

</ tx:attributes >

</ tx:advice >


< aop:config >

< aop:pointcut id = " demoServiceMethods "  expression = " execution(* hibernatesample.service.*.*(..)) " />

< aop:advisor advice - ref = " txAdvice "  pointcut - ref = " demoServiceMethods " />

< aop:aspect id = " logAspect "  ref = " logAspectTarget " >

< aop:pointcut id = " businessService "  expression = " execution(* hibernatesample.service.*.*(..)) " />

< aop:after pointcut - ref = " businessService "  method = " logMethod " />

</ aop:aspect >

</ aop:config >



 

        完成上面的工作相当于完成了 Spring1.X 的 自动代理。 我们接下来需要定义的任何 Service Bean 都可以很纯粹很纯粹了:


< bean  id ="accountService"  class ="hibernatesample.service.impl.AccountServiceImpl" >

< property  name ="accountDAO"  ref ="accountDAO" ></ property >

</ bean >


        第二种实现 AOP 的方式和第一种相比,只是在 LogingAspect 中加入了注释,而省去了配置文件中和 LogingAspect 相关的配置。重新编写的 LogingAspect 如下:


@Aspect

public   class  LogingAspect {

@Pointcut(
" execution(* hibernatesample.service.*.*(..)) " )

public   void  businessService(){}

@After(
" businessService() " )

public   void  logMethod(JoinPoint jp){

System.err.println(jp.getTarget().getClass());

System.err.println(jp.getSignature().getName());

}

}

        而简化后的配置文件可以去除上面的如下和 logAspect 相关的配置信息:


< aop:aspect  id ="logAspect"  ref ="logAspectTarget" >

< aop:pointcut  id ="businessService"  expression ="execution(* hibernatesample.service.*.*(..))" />

< aop:after  pointcut-ref ="businessService"  method ="logMethod" />

</ aop:aspect >

< bean  id ="logAspectTarget"  class ="hibernatesample.service.util.LogingAspect" ></ bean >

        还没有完,为了使 Spring 应用 LogingAspect  的注释,需要在配置文件中添上

        <aop:aspectj-autoproxy/>


          如果觉得事务的配置没有使用注释更简洁(我倒不会有这样的想法,毕竟在配置文件中声明的事务只是那么固定的几段,除非作用于类上的事务逻辑上很复杂),也可以使用Spring提供的事务注释作用于类文件上,这可是更细粒度的事务声明了。

      坦率的说,由于时间有限,该文写的比较粗糙。对于Spring AOP有兴趣并有疑问的朋友,可以参考Spring的文档,它的文档做的还是不错的。
 在结束了上一篇 Spring 1.x中AOP的使用之后,我又马不停蹄的打开 Eclipse,做着 Spring2.X下了 AOP的 Sample。在上一篇文章中的配置过程中,由于对自动代理不是很熟,出现了循环引用的异常信息。当初在阅读 PicoContainer源码时看到循环引用不以为然,后来在学习 AspectJ时小有印象,这次在折腾了半个多小时后可加深了印象。

        好啦,闲言少叙,奔向文本的主题吧。和Spring1.X相比,Spring2.X使用AspectJ的语法来声明AOP,这使得它更“标准”,更灵活了。还是那句话,如果你不了解AspectJ并且打算使用Spring2.X的AspectJ式AOP,那就学学AspectJ吧,这方面的书还是很多了。

        Spring2.X下的切面有两种实现方式,一种是以Java文件定义切面(其只是普通的Java类),然后在配置文件中声明定义的切面;另一种是在Java类中引入和AOP相关的元数据(注释)。

        先介绍第一种配置方式。需要指出的是,Spring2.X的beans名称空间和Spring1.X有所不同,它采用了Schema而不是DTD(也可采用DTD方式,具体的请参考文档)。还是引入毫无意义的日志切面,定义的切面类LogingAspect 如下:


public   class  LogingAspect {

public   void  logMethod(JoinPoint jp){

        System.err.println(jp.getTarget().getClass());

        System.err.println(jp.getSignature().getName());

}

}

        同时在配置文件中如下配置:


< bean id = " logAspectTarget "   class = " hibernatesample.service.util.LogingAspect " ></ bean >

< aop:config >

< aop:aspect id = " logAspect "  ref = " logAspectTarget " >

< aop:pointcut id = " businessService "  expression = " execution(* hibernatesample.service.*.*(..)) " />

< aop:after pointcut - ref = " businessService "  method = " logMethod " />

</ aop:aspect >

</ aop:config >

       对于上面的切面,切入点businessService是在配置文件中声明的,其表达式采用了 AspectJ的语法,LogingAspect 类中logMethod(JoinPoint jp)方法根据配置文件信息可知其是after通知,方法的JoinPoint参数不是必须的,它是来自于AspectJ的实用类,这里用它不过输出一些和连接点有关的信息。当然,在Spring2.X中,切入点和通知能更灵活的使用,我们可以如AspectJ一样传递参数给通知。如果需要在Service中引入事务功能,需要如下配置事务通知:


< tx:advice id = " txAdvice "  transaction - manager = " transactionManager " >

< tx:attributes >

< tx:method name = " get* "  read - only = " true " />

< tx:method name = " find* "  read - only = " true " />

< tx:method name = " * " />

</ tx:attributes >

</ tx:advice >


< aop:config >

< aop:pointcut id = " demoServiceMethods "  expression = " execution(* hibernatesample.service.*.*(..)) " />

< aop:advisor advice - ref = " txAdvice "  pointcut - ref = " demoServiceMethods " />

< aop:aspect id = " logAspect "  ref = " logAspectTarget " >

< aop:pointcut id = " businessService "  expression = " execution(* hibernatesample.service.*.*(..)) " />

< aop:after pointcut - ref = " businessService "  method = " logMethod " />

</ aop:aspect >

</ aop:config >



 

        完成上面的工作相当于完成了 Spring1.X 的 自动代理。 我们接下来需要定义的任何 Service Bean 都可以很纯粹很纯粹了:


< bean  id ="accountService"  class ="hibernatesample.service.impl.AccountServiceImpl" >

< property  name ="accountDAO"  ref ="accountDAO" ></ property >

</ bean >


        第二种实现 AOP 的方式和第一种相比,只是在 LogingAspect 中加入了注释,而省去了配置文件中和 LogingAspect 相关的配置。重新编写的 LogingAspect 如下:


@Aspect

public   class  LogingAspect {

@Pointcut(
" execution(* hibernatesample.service.*.*(..)) " )

public   void  businessService(){}

@After(
" businessService() " )

public   void  logMethod(JoinPoint jp){

System.err.println(jp.getTarget().getClass());

System.err.println(jp.getSignature().getName());

}

}

        而简化后的配置文件可以去除上面的如下和 logAspect 相关的配置信息:


< aop:aspect  id ="logAspect"  ref ="logAspectTarget" >

< aop:pointcut  id ="businessService"  expression ="execution(* hibernatesample.service.*.*(..))" />

< aop:after  pointcut-ref ="businessService"  method ="logMethod" />

</ aop:aspect >

< bean  id ="logAspectTarget"  class ="hibernatesample.service.util.LogingAspect" ></ bean >

        还没有完,为了使 Spring 应用 LogingAspect  的注释,需要在配置文件中添上

        <aop:aspectj-autoproxy/>


          如果觉得事务的配置没有使用注释更简洁(我倒不会有这样的想法,毕竟在配置文件中声明的事务只是那么固定的几段,除非作用于类上的事务逻辑上很复杂),也可以使用Spring提供的事务注释作用于类文件上,这可是更细粒度的事务声明了。

      坦率的说,由于时间有限,该文写的比较粗糙。对于Spring AOP有兴趣并有疑问的朋友,可以参考Spring的文档,它的文档做的还是不错的。
  
Monorepo与pnpm:前端项目管理的完美搭档 pnpm又称 performant npm,翻译过来就是高性能的npm。Monorepo是一种项目开发与管理的策略模式,它代表"单一代码仓库"(Monolithic Repository)。在Monorepo模式中,所有相关的项目和组件都被存储在一个统一的代码仓库中,而不是分散在多个独立的代码仓库中,这些项目之间还可能会有依赖关系。 阅读详情

相关推荐

从零开始:在Windows WSL中搭建Openfoam7+blastfoam2.0.0开发环境(避坑大全)

本文详细指导在Windows WSL中搭建OpenFOAM 7与BlastFOAM 2.0.0开发环境,重点解析了安装过程中的常见“坑点”,如编译模式不匹配导致的符号错误,并提供了从系统准备、软件部署到环境验证的完整解决方案,帮助开发者高效构建CFD与爆炸模拟开发平台。

stem5的博客 527

Spring 2.0 AOP 与事务配置

导读:   Spring 2.0 AOP 与事务配置   ************Spring 1.0的标准事务配置***************   先定义一个baseTxService进行基本的事务定义,类型为TransactionProxyFactoryBean。如果service没有基于接口,使用cgilib来实现AOP,定义   实际的Manager类设置parent=baseT

我的世界我的梦 1594

LTspice introduction - 2 LTspice的界面

LTspice的界面主要有两个:Schematic Capture和Waveform Viewer Schematic Capture 它主要是用来画电路图的,画完电路图之后,添加一些dot 命令同时选择一些仿真的参数,点击执行(Run)Waveform Viewer 如果你的仿真不是op point的话,一个都会打开它,在它里面你可以画图相应的图形。 有两种方式可以在Viewer

贾亮的专栏 3223

spring2.0和AOP

在Spring 2.0中最激动人心的增强之一是关于Spring AOP,它变得更加便于使用而且更加强大,主要是通过复杂而成熟的AspectJ语言的支持功能来实现,而同时保留纯的基于代理的Java运行时。我们一直坚信AOP(面向切面编程)很重要。为什么?因为它提供给我们一种新的思考程序结构的方法,能够解决很多纯OOP无法解决的问题——让我们能够在一个模块中实现某些需求,而不是以发散的方式实现。

魔幻之翼的坚持 2256

主板USB接口全部失效解决方案(通用串行总线USB控制器有黄色叹号)保姆级教程亲测有效

通用串行总线控制器总是有叹号解决办法 办公室的崩腾时代老电脑,疫情期间没人用,来了开机之后发现鼠标键盘都用不了,本以为是主机放时间长出了问题,后来想起来就百度了“鼠标键盘都失效”的标题,结果发现了“串行总线控制器总是感叹号”的关联问题。正好办公室电脑都装有teamviwer常用来远程办公(在家偷懒)。所以通过远程发现电脑室可以运行的。并在控制面板发现:通用串行总线控制器总是感叹号,插入外设时USB无反应。如图:​ 并且右键选中其中一个,点击最后一个选项:“属性” 可以发现“设备状态”中会提示“由...

xiao_bai_0_0的博客 2万+

ABAP HANA BP主数据批导

SAPhana官方推荐的创建bp主数据的类是CL_MD_BP_MAINTAIN 客户的创建具体示例代码如下: DATA: LT_RETURN_MAP TYPE MDG_BS_BP_MSGMAP_T. DATA: LS_RETURN_MAP TYPE MDG_BS_BP_MSGMAP. DATA: LS_MESSAGE_MAP TYPE MDG_BS_BP_MSGMAP_KEY. DATA: LT_DATA TYPE CVIS_EI_EXTERN_.

IamRunjiang的博客 4144

Axis2整合Spring AOP

Axis2 with Spring AOP As they described in the user guide Axis2 supports for Spring framework very well, but the user guide still not updated about how to deal with latest features of Spring fram

lklinkang的专栏 1373

ATM火控电容改造实战:提升速凌无刷电机动力与系统稳定性

在嵌入式系统与电机驱动领域,电源完整性是保障电路稳定运行的核心基础。其核心原理在于通过合理的电容网络设计,为负载提供瞬时大电流并滤除高频噪声,从而维持电压稳定。这项技术的核心价值在于能显著提升系统的动态响应能力与可靠性,避免因电压跌落导致微控制器复位或功率器件过应力。典型的应用场景包括无人机电调、机器人关节驱动以及各类需要快速响应的伺服系统。本文聚焦于水弹发射器ATM火控系统的硬件迭代,通过详解电容的选型、布局与焊接流程,特别是针对速凌五代无刷电机的高启动电流特性,系统性地阐述了如何通过强化电源储能与芯片去

weixin_33868027的博客 559

spring aop 2.0

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33918114的博客 169

[xboard-ok210] 44 s5pv210开发板介绍和对比

文章目录前言四大S3C6410提供商友坚开发板UT-S5PV210华天正(润尔)real210飞凌开发板ok210九鼎x210友善之臂开发板tiny210mini210smart210天嵌开发板tq210sate210xboardxboardxboard之ok210 前言 四大S3C6410提供商 友坚开发板 UT-S5PV210 华天正(润尔) real210 飞凌开发板 ok210 九鼎 x210 友善之臂开发板 tiny210 mini210 smart210 天嵌开发板 tq210 sate210

鹰之翔 288

第3版•系统集成项目管理工程师(中级) │ 第12章 执行过程组 ✦ 管理沟通

🥏第3版•系统集成项目管理工程师(中级) │ 第12章 执行过程组 ✦ 管理沟通

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1万+

struts2中实现spring的aop

struts2中实现spring的aop 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 全新的界面设计 ,将会带来全新的写作体验; 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显

sinat_22201155的博客 756

探索 .NET 多版本兼容的精美 WinForms UI 控件库:ReaLTaiizor

你可以根据需要修改主题的颜色方案。// 示例:修改主题颜色设置主色和次色。应用到中。通过继承和重写控件的方法,可以实现自定义样式。// 示例:自定义 MetroButton 样式// 自定义绘制逻辑创建类继承自。重写OnPaint方法,添加自定义绘制逻辑。

墨夶的博客 1509

Spring AOP 和 Spring 1.2 中AOP的配置

目录 一、AOP, AspectJ, Spring AOP 前世今生 1、AOP 2、AspectJ 3、Spring AOP 二、Spring 1.2 中的配置 1、FactoryBean方式,创建动态代理 2、Advisor,实现更细粒度的方法增强 3、autoproxy 自动代理 一、AOP, AspectJ, Spring AOP 前世今生 1、AOP AOP 是在我们原来写的代码的基础上,进行一定的包装,如在方法执行前、方法返回后、方法抛出异常后等地方进行一定的拦截处理或者叫

swadian2008的博客 450

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

在struts2 action中使用spring aop出错

struts.xml文件:       ${nextPage}    login.jsp   spring的applicationcontext.xml配置文件://action    class="com.edgar.s2shlogin.web.action.MemberAction" scope="prototype">         

lxw_happy的专栏 1111

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Spring2.5 注解 Aspect AOP

引用 :http://www.cnblogs.com/200911/archive/2012/08/09/2630358.html 在低版本Spring中定义一个切面是比较麻烦的,需要实现特定的接口,并进行一些较为复杂的配置,低版本Spring AOP的配置是被批评最多的地方。Spring听取这方面的批评声音,并下决心彻底改变这一现状。在Spring2.0中,Spring AOP已经焕然

wtfpewfn的专栏 511

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Spring 2.X 中AOP的使用浅析

本文转自网络   和Spring1.X相比,Spring2.X使用ASPectJ的语法来声明AOP,这使得它更“标准”,更灵活了。还是那句话,如果你不了解AspectJ并且打算使用Spring2.X的AspectJ式AOP,那就学学AspectJ吧,这方面的书还是很多了。   Spring2.X下的切面有两种实现方式,一种是以Java文件定义切面(其只是普通的Java类),然后在配置文件中声明定义...

简约时尚,突破自我 358

spring aop对Struts2的action拦截时出现异常

     方法一:引用http://sulong.me/archives/51:不要让Action继承ActionSupport。      用spring做为struts2的ObjectFactory,用spring来生成action,并对action的方法加上aop时,不要使Action继承于ActionSupport,否则会出现类似于以下的异常:  java.lang.NoS...

lilywangcn 262

Spring 2.X 中AOP的简明教程

和Spring1.X相比,Spring2.X使用AspectJ的语法来声明AOP,这使得它更“标准”,更灵活了。还是那句话,如果你不了解AspectJ并且打算使用Spring2.X的AspectJ式AOP,那就学学AspectJ吧,这方面的书还是很多了。  Spring2.X下的切面有两种实现方式,一种是以Java文件定义切面(其只是普通的Java类),然后在配置文件中声明定...

weixin_34257076的博客 94

Spring AOP—2、Spring中的AOP能为我们做些什么

在介绍Spring的AOP功能前,先总结下几个AOP的概念,下面的几个AOP概念不是Spring指定的,而是AOP本身就有的。看看这些专业术语: Aspect:将对多个类的关注进行统一的模块。在Spring里面是一个普通的类,这个类相当于一个模块,里面包含了对各种类的所有关注,使用@Aspect来表示这个类是一个表明关注方面的类。 Join point:连接点,一个程序执行中的某个点,例如一个

rdarda的专栏 2512

spring aop与strut2的拦截器冲突

作者:yan 当配置spring aop(比如日志的aop)拦截所有类(包括)action时,会与struts2的拦截器机制相冲突,导致struts2的机制失效,功能用不了; 解决方法:spring 配置aop时,不要拦截action类。 如:

xyzroundo的专栏 1397

Spring 2.0中 AOP的编程

 Spring 2.0中 AOP的编程:方式一:publicclass User {    publicvoid method() {        System.out.println("in method1");    }}publicclass LogBean {    public Object aroundLogCalls(ProceedingJoin

黄瓜和土豆的专栏 4749

Struts2 拦截器与Spring AOP的区别

原文链接:http://www.cnblogs.com/IcreamPrince/p/3995616.html 在学习Spring AOP技术的同时,发现其实与以前做过的拦截器的功能很类似,于是开始抱着这两者之间有什么关系的问题进行深入研究。 我们知道struts2使用拦截器主要是用来处理用户的请求,OGNL的使用,表单验证 等。 而spring的拦截器,主要体现在AOP的事务管理方

JAVA AND GIS 2125

Spring 2.0 AOP 与事务配置突破

[b]Spring 2.0 的重头戏之一就是AspectJ 式 AOP 配置。 但是一定要通过对比,才能看到2.0式的AOP配置是如何跳出一片新天空的。[/b] [size=medium][b]一. 对比[/b][/size] 先看1.0的标准事务配置: [code="xml"] PROPAGATION_REQUIRED,readOnly ...

没有什么能够阻挡,你对自由的向往 131
上一篇: AspectJ
下一篇: Java,annotation,标注
javaokay
博客等级 码龄20年 6粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值