`
jinnianshilongnian
  • 浏览: 21503987 次
  • 性别: Icon_minigender_1
博客专栏
5c8dac6a-21dc-3466-8abb-057664ab39c7
跟我学spring3
浏览量:2418662
D659df3e-4ad7-3b12-8b9a-1e94abd75ac3
Spring杂谈
浏览量:3008768
43989fe4-8b6b-3109-aaec-379d27dd4090
跟开涛学SpringMVC...
浏览量:5639479
1df97887-a9e1-3328-b6da-091f51f886a1
Servlet3.1规范翻...
浏览量:259916
4f347843-a078-36c1-977f-797c7fc123fc
springmvc杂谈
浏览量:1597310
22722232-95c1-34f2-b8e1-d059493d3d98
hibernate杂谈
浏览量:250216
45b32b6f-7468-3077-be40-00a5853c9a48
跟我学Shiro
浏览量:5858947
Group-logo
跟我学Nginx+Lua开...
浏览量:701999
5041f67a-12b2-30ba-814d-b55f466529d5
亿级流量网站架构核心技术
浏览量:785222
社区版块
存档分类
最新评论

【第六章】 AOP 之 6.8 切面实例化模型 ——跟我学spring3

阅读更多

       所谓切面实例化模型指何时实例化切面。

       Spring AOP支持AspectJ的singleton、perthis、pertarget实例化模型(目前不支持percflow、percflowbelow 和pertypewithin)。

  • singleton即切面只会有一个实例;
  • perthis每个切入点表达式匹配的连接点对应的AOP对象都会创建一个新切面实例;
  • pertarget每个切入点表达式匹配的连接点对应的目标对象都会创建一个新的切面实例;

默认是singleton实例化模型,Schema风格只支持singleton实例化模型,而@AspectJ风格支持这三种实例化模型。

 

         singleton使用@Aspect()指定,即默认就是单例实例化模式,在此就不演示示例了。

 

         perthis每个切入点表达式匹配的连接点对应的AOP对象都会创建一个新的切面实例,使用@Aspect("perthis(切入点表达式)")指定切入点表达式;

如@Aspect("perthis(this(cn.javass.spring.chapter6.service.IIntroductionService))")将对每个匹配“this(cn.javass.spring.chapter6.service.IIntroductionService)”切入点表达式的AOP代理对象创建一个切面实例,注意“IIntroductionService”可能是引入接口。

 

         pertarget每个切入点表达式匹配的连接点对应的目标对象都会创建一个新的切面实例,使用@Aspect("pertarget(切入点表达式)")指定切入点表达式;

如@Aspect("pertarget(target(cn.javass.spring.chapter6. service.IPointcutService))")将对每个匹配“target(cn.javass.spring.chapter6.service. IPointcutService)”切入点表达式的目标对象创建一个切面,注意“IPointcutService”不可能是引入接口。

 

       在进行切面定义时必须将切面scope定义为“prototype”,如“<bean class="……Aspect" scope="prototype"/>”,否则不能为每个匹配的连接点的目标对象或AOP代理对象创建一个切面。

 

       示例请参考cn.javass.spring.chapter6. InstanceModelTest。

 

 

原创内容,转载请注明出处【http://sishuok.com/forum/blogPost/list/0/2475.html

17
0
分享到:
评论
3 楼 yangpeihai 2012-08-21  
jinnianshilongnian 写道
yangpeihai 写道
一直在关注博主的博客,受益匪浅,非常感谢
现在请教一个AOP写日志的问题,假如我在service里面调用了N个private的方法,每个方法的调用都需要写日志,代码模型如下:
  public void aaa(){
     bbb();//bbb为private
     ccc();//ccc为private
     ddd();//ddd为private
     。
     。
     。
  }

请问这种模型下,我是否可以用AOP或其他技术解决为每个private自动写日志的问题?
刚刚学spring,别见笑啊,发现AOP好像只能写粗粒度的日志(调用接口前记录参数,调用接口后记录返回结果)。
期待博主精彩回复,谢谢


谢谢,

private方法无法被spring AOP代理,折中方法:
1、直接在private方法进行记录;
2、公开private方法;
3、走原生的aspectj(几乎可以代理所有情况、Spring集成aspectj 我也没研究过 你可以从网上找找例子)。

谢谢,正在研究aspectj
2 楼 jinnianshilongnian 2012-08-20  
yangpeihai 写道
一直在关注博主的博客,受益匪浅,非常感谢
现在请教一个AOP写日志的问题,假如我在service里面调用了N个private的方法,每个方法的调用都需要写日志,代码模型如下:
  public void aaa(){
     bbb();//bbb为private
     ccc();//ccc为private
     ddd();//ddd为private
     。
     。
     。
  }

请问这种模型下,我是否可以用AOP或其他技术解决为每个private自动写日志的问题?
刚刚学spring,别见笑啊,发现AOP好像只能写粗粒度的日志(调用接口前记录参数,调用接口后记录返回结果)。
期待博主精彩回复,谢谢


谢谢,

private方法无法被spring AOP代理,折中方法:
1、直接在private方法进行记录;
2、公开private方法;
3、走原生的aspectj(几乎可以代理所有情况、Spring集成aspectj 我也没研究过 你可以从网上找找例子)。
1 楼 yangpeihai 2012-08-20  
一直在关注博主的博客,受益匪浅,非常感谢
现在请教一个AOP写日志的问题,假如我在service里面调用了N个private的方法,每个方法的调用都需要写日志,代码模型如下:
  public void aaa(){
     bbb();//bbb为private
     ccc();//ccc为private
     ddd();//ddd为private
     。
     。
     。
  }

请问这种模型下,我是否可以用AOP或其他技术解决为每个private自动写日志的问题?
刚刚学spring,别见笑啊,发现AOP好像只能写粗粒度的日志(调用接口前记录参数,调用接口后记录返回结果)。
期待博主精彩回复,谢谢

相关推荐

    跟开涛学Spring

    1.27 【第六章】 AOP 之 6.8 切面实例化模型 ——跟我学spring3 . . . . . . . . . . . . . . . . . . . . . . . . . . . .282 1.28 【第六章】 AOP 之 6.9 代理机制 ——跟我学spring3 . . . . . . . . . . . . . ...

    spring的aop切面编程实例

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它允许我们在不修改源代码的情况下对应用程序的行为进行统一管理和控制。在本实例中,我们将深入探讨如何使用AspectJ技术和XML配置来实现AOP。 首先,了解...

    Spring AOP面向切面三种实现

    在IT行业中,Spring框架是Java企业级应用开发的首选,其强大的功能之一就是AOP(面向切面编程)。本文将详细解析Spring AOP的三种实现方式,帮助你深入理解这一重要概念。 首先,理解AOP的基本概念至关重要。AOP是...

    Spring4AOP 面向切面编程实例之方法拦截

    Spring4AOP 面向切面编程实例之方法拦截实例 一下利用Spring4的最后一个版本Spring4.3.9,实现简单的方法拦截实例。 Eclipse 建立java工程,导入必要的jar包,工程目录如下:

    跟我学spring3

    《跟我学Spring3》是一本深入浅出的Spring框架学习指南,主要针对Spring 3.x版本进行详细讲解。Spring作为Java领域最流行的轻量级框架,它的应用广泛且功能强大,涵盖依赖注入、AOP(面向切面编程)、数据访问、Web...

    spring aop 自定义切面示例

    在Spring AOP(面向切面编程)中,自定义切面是实现业务逻辑解耦、增强代码可维护性的重要手段。AspectJ是一个强大的面向切面的编程库,它提供了与Spring AOP集成的能力,使我们可以编写更为灵活和模块化的代码。...

    Spring-aop面向切面编程实例

    面向切面编程(Aspect-Oriented Programming,AOP)是Spring框架的核心特性之一,它提供了一种优雅的方式来处理系统的横切关注点,如日志、事务管理、性能监控和权限控制等。在Spring中,AOP主要通过代理模式实现,...

    spring切面AOP所使用的jar包

    Spring框架的AOP(面向切面编程)是其核心特性之一,它允许开发者在不修改原有代码的情况下,通过切面来插入额外的功能,比如日志记录、事务管理、性能监控等。在Spring AOP中,主要涉及到两个重要的库:...

    Spring mvc mybatis plus 实现AOP 切面日志系统

    本项目“Spring MVC Mybatis Plus 实现AOP 切面日志系统”旨在提供一个基础的日志记录框架,能够自动追踪和记录应用程序的关键操作,同时支持数据持久化到数据库中,方便后期分析和问题排查。下面将详细介绍这些技术...

    跟我学spring

    【第六章】面向切面编程(AOP)是Spring的另一个核心概念,它允许开发者将横切关注点(如日志、事务管理等)与业务逻辑分离。6.1节介绍AOP基础,6.2节展示一个简单的AOP示例,6.3节和6.4节分别讨论基于Schema和基于@...

    跟我学spring3pdf,高清

    《跟我学Spring3》是一本深入浅出的Spring框架学习指南,主要针对Spring 3.x版本进行讲解。这本书旨在帮助初学者和有一定经验的开发者更好地理解和应用Spring框架,提升其在实际开发中的技能。PDF文档提供了清晰的...

    spring-aop实例

    Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种强大的方式来实现横切关注点,如日志、事务管理、安全性等,从而解耦应用程序的核心业务逻辑。在Spring AOP中,关注点被模块化为独立的“切面”...

    spring AOP切面编程

    Spring AOP(Aspect Oriented Programming,面向切面编程)是Spring框架的重要组成部分,它扩展了传统的面向对象编程,使得开发者可以方便地实现横切关注点,如日志、事务管理、性能监控等。在Spring中,AOP通过代理...

    跟我学Spring3

    《跟我学Spring3》这本书是针对Java开发人员深入学习Spring框架第三版的一份教程。Spring作为Java企业级应用开发中的核心框架,它以其强大的功能、灵活性和模块化设计深受开发者喜爱。Spring3版本在前一版本基础上...

    aop切面拦截单个方法实例

    AOP(Aspect Oriented Programming,面向切面编程)是一种编程范式,旨在通过将系统中的关注点(concerns)分离出来,提高代码的可维护性和可重用性。在Java开发中,AOP通常用于日志记录、事务管理、性能监控等横切...

    开涛 跟我学spring3 pdf+源码

    在第一部分(1-7章)中,作者开涛会详细讲解Spring的基本原理,包括依赖注入(DI)和面向切面编程(AOP)的概念。DI是Spring的核心特性,它使得对象之间的耦合度降低,提高了代码的可测试性和可维护性。AOP则提供了...

    跟我学spring3(总共13章)8

    《跟我学Spring3》系列教程是为初学者和有经验的开发者提供的一份全面而深入的Spring框架学习资源。Spring3作为Java企业级应用开发的重要框架,它的核心特性包括依赖注入、AOP(面向切面编程)、数据访问、Web开发等...

    跟我学spring3(总共13章)6

    《跟我学Spring3》是针对初学者和有一定基础的开发者设计的一套全面、深入的教程,旨在帮助读者理解和掌握Spring3框架的核心概念和技术。本教程共计13个章节,覆盖了Spring3.0和3.x版本的主要特性。下面将详细阐述第...

Global site tag (gtag.js) - Google Analytics