-
用Spring的AOP定义Pointcut时的问题?3
<script src="/javascripts/tinymce/themes/advanced/langs/zh.js" type="text/javascript"></script><script src="/javascripts/tinymce/plugins/javaeye/langs/zh.js" type="text/javascript"></script>
我用如下所示的AspectJExpressionPointcut方式定义Pointcut
<bean id="performancePointcut"
class="org.springframework.aop.aspectj.AspectJExpressionPointcut">
<!--
<property name="expression" value="execution(* *.getListByDetachedCriteria(..))" /> -------------(1)
<property name="expression" value="execution(* com.companyName.smp.dao.hibernate.ProjectDaoHibernate.getListByDetachedCriteria(..))" />
--> -------------(2)
<property name="expression" value="execution(* *.getListByDetachedCriteria(..))" />
</bean>
但一个问题:用1处的匹配可以找到ProjectDaoHibernate.getListByDetachedCriteria方法并给它加Advice,当用2处所示的方法来“精准打击”时反而不行了。
这是为什么?怎么改?
谢谢先!
=========================
后来发现如下的三种方式都行:
<property name="expression" value="execution(* com.cernet.smp.dao.hibernate.*.*(..))" /> <property name="expression" value="execution(* com.cernet.smp.dao.hibernate.*.getListByDetachedCriteria(..))" /> <property name="expression" value="execution(* com.cernet.smp.dao.hibernate.*.getListByDetachedCriteria*(..))" />
但问题是,不够精准。
===2010-6-2 18:23:49======
http://www.eclipse.org/aspectj/doc/released/progguide/semantics-pointcuts.html#matching
http://static.springsource.org/spring/docs/2.5.x/reference/aop.html#aop-ataspectj-or-xml
======2010-6-2 19:04:03===============
<property name="expression" value="execution(* com.cernet.smp.dao.hibernate.*.getListByDetachedCriteria*(..))and bean(projectDao) and this(com.cernet.smp.dao.hibernate.ProjectDaoHibernate)" />
用这个可以跑的通,但别的dao也给加了advice.
2010年6月02日 17:09
2个答案 按时间排序 按投票排序
-
我觉得大家在这些东西上面浪费的时间实在太多了,不仅花了许多的时间去学习,用的时候问题还是接二连三,大量的光阴浪费在struts,spring上面,何必呢?希望有一天我写的框架能开源给大家。其名是struct1.0,已经做了一个简单的应用。有机会可以交流。
2010年6月11日 17:12
-
引用
但一个问题:用1处的匹配可以找到ProjectDaoHibernate.getListByDetachedCriteria方法并给它加Advice,当用2处所示的方法来“精准打击”时反而不行了。
我用aop并没有你说的问题,我用AOP拦截Action:public class TestAction extends ActionSupport { /** * */ private static final long serialVersionUID = 1L; private static final Logger log = LoggerFactory.getLogger(TestAction.class); //日志类 private static final String PAGE_TONAV = "/nav2.jsp"; //导航页 private String url; public String toNav2(){ log.debug("进入导航菜单页2"); url = PAGE_TONAV; return SUCCESS; } public String getUrl() { return url; } }
XML配置:<bean id="handler" class="com.monitorFax.advice.AopAdviceHandler" scope="prototype"></bean> <aop:config proxy-target-class="true"> <aop:aspect ref="handler" > <aop:around method="doAround" pointcut="execution(* com.test.actions.TestAction.toNav(..))" /> </aop:aspect> </aop:config>
上面的设置能精准拦截TestAction的toNav方法,当把pointcut改为:<aop:around method="doAround" pointcut="execution(* *.toNav(..))" />
也能拦截到toNav方法,没有出现你说的那种情况。2010年6月03日 10:12
相关推荐
在使用Spring AOP时,我们可以通过XML配置或注解的方式来定义切面。例如,可以使用`@Aspect`注解定义一个切面类,`@Before`、`@After`等注解来声明通知,`@Pointcut`定义切点表达式。 在实际开发中,Spring AOP广泛...
通常,我们会创建一个切面类(Aspect),在这个类中定义pointcut和advice,然后在Spring配置文件中声明这个切面,使其生效。例如: ```java @Aspect public class LoggingAspect { @Before("execution(* ...
Spring AOP(面向切面编程)是Spring框架的重要组成部分,它提供了一种模块化和声明式的方式来处理系统中的交叉关注点问题,如日志、事务管理、安全性等。本示例将简要介绍如何在Spring应用中实现AOP,通过实际的...
现在,我们回到主题——"springaop依赖的jar包"。在Spring 2.5.6版本中,使用Spring AOP通常需要以下核心jar包: - `spring-aop.jar`:这是Spring AOP的核心库,包含了AOP相关的类和接口。 - `spring-beans.jar`:...
在本教程中,我们将深入探讨Spring AOP的不同使用方法,包括定义切点、通知类型、组装切面以及使用JUnit4进行测试。 首先,我们需要理解Spring AOP的基础概念。AOP的核心是切点(Pointcut),它定义了关注点在何处...
- 在`<aop:config>`标签内定义切面,`<aop:pointcut>`定义切入点,`<aop:advisor>`定义通知。 - `<aop:aspect>`标签用于定义完整的切面,包括切入点和通知。 - **注解配置**: - 使用`@Aspect`注解定义切面类,`...
在Spring AOP中,我们无需深入到每个方法的实现细节,而是可以定义“切面”,在合适的时机(如方法调用前、后、异常发生时等)执行特定的逻辑。这样,业务代码和关注点(如日志、事务管理等)得以分离,提高了代码的...
XML配置通常在Spring的配置文件中完成,如`<aop:config>`标签用于开启AOP支持,`<aop:aspect>`定义切面,`<aop:pointcut>`定义切点,`<aop:advisor>`定义通知。注解方式则更简洁,可以使用`@Aspect`、`@Before`、`@...
在这个过程中,Spring AOP 使用 pointcutParser 来解析 Pointcut 配置,并生成相应的 Bean 定义对象。 7. 创建代理:在所有的 Bean 定义对象生成后,Spring AOP 会创建代理对象,以便在后续的流程中使用。在这个...
2. **注解配置**:Spring 2.5引入了基于注解的AOP配置,可以在切面类上使用@Aspect注解,@Before、@After、@AfterReturning、@AfterThrowing和@Around定义通知,@Pointcut定义切点。例如: ```java @Aspect ...
在 Spring AOP 中,`org.springframework.aop.framework.JdkDynamicAopProxy` 类实现了 `InvocationHandler` 接口,当代理对象的方法被调用时,实际会执行 `JdkDynamicAopProxy.invoke()` 方法。这个方法会检查并...
4. **丰富的切入点表达式语言**:Spring AOP支持使用SpEL(Spring Expression Language)来定义复杂的切入点表达式,这让开发者能够更加灵活地控制通知的触发条件。 #### 四、Spring AOP的实现示例 接下来,我们...
在给出的XML配置中,`<aop:config>`元素开启AOP支持,而`<aop:aspect>`元素用于定义切面,其内部通过`<aop:pointcut>`定义切点,并通过`<aop:before>`和`<aop:after>`指定通知。 为了使用这些配置,我们需要在代码...
- 当目标类实现了接口时,Spring AOP会选择使用JDK动态代理。它会生成一个实现了目标类所有接口的代理类,并在调用接口方法时插入通知代码。 **3. CGLIB代理** - 如果目标类没有实现接口,Spring AOP会使用CGLIB...
使用`<aop:before>`、`<aop:after>`、`<aop:after-returning>`、`<aop:after-throwing>`和`<aop:around>`元素定义不同类型的的通知,例如: ```xml <aop:aspect id="loggingAspect" ref="loggingAspectBean"> <aop...
在Spring AOP中,你可以选择使用AspectJ的编译时或运行时织入,以实现更细粒度的控制和更高的性能。 2. **aspectjweaver.jar**:AspectJ Weaver是AspectJ框架的一部分,主要负责在运行时对类进行字节码操作,实现切...
2. **注解驱动**:使用`@Aspect`注解声明切面类,`@Before`、`@After`、`@Around`、`@AfterReturning`、`@AfterThrowing`定义不同类型的通知,`@Pointcut`定义切入点表达式。 ### 五、示例 以下是一个简单的切面...
在这个版本中,Spring AOP支持基于注解的切面定义,比如`@Aspect`、`@Before`、`@After`等,同时也支持基于XML配置的切面定义。这个jar包使得Spring应用程序能够方便地利用AOP特性,无需引入额外的编译工具或构建...
本节将详细介绍如何使用Spring AOP实现流程日志跟踪,主要关注于如何通过AOP拦截特定的类和方法来进行日志记录。 ##### 3.1 配置Spring AOP 在Spring配置文件中定义切面和切入点表达式是非常关键的一步。一般来说...
Spring AOP 可以与 AspectJ 集成,使用其编译时或加载时织入功能,以提高性能和减少运行时开销。`AspectJ 1.6.12` 版本的 Jar 包包括了 `aspectjrt.jar` 和 `aspectjweaver.jar`: - **aspectjrt.jar**:AspectJ ...