-
spring 中的<aop:advisor>和<aop:aspect>有什么区别?不同之处在那里,请大牛们帮小弟解一下疑惑5
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="save*" propagation="REQUIRED"/> <tx:method name="delete*" propagation="REQUIRED"/> <tx:method name="get*" read-only="true"/> <tx:method name="find*" read-only="true"/> </tx:attributes> </tx:advice> <bean id="dataAccessThrowsAdvice" class="com.XXX.XXX.aop.exception.XXX" /> <bean id="serviceThrowsAdvice" class="com.XXXXXX.aop.exception.XXX" /> <bean id="actionThrowsAdvice" class="com.XXX.XXXaop.exception.XXX" /> <aop:aspectj-autoproxy/> <aop:config proxy-target-class="true"> <!-- 切面事务归txAdvice处理 --> <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.XXX..*.*Dao.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.XXX..*.*Manager.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.XXX..*.*Action.*(..))" /> <aop:advisor advice-ref="dataAccessThrowsAdvice" pointcut="execution(* com.XXX..*.*Dao.*(..))"/> <aop:advisor advice-ref="serviceThrowsAdvice" pointcut="execution(* com.XXX..*.*Dao.*(..))" /> <aop:advisor advice-ref="actionThrowsAdvice" pointcut="execution(* com.XXX..*.*Action.*(..))" /> </aop:config>
spring 中的<aop:advisor>和<aop:aspect>有什么区别?不同之处在那里,请大牛们帮小弟解一下疑惑配置文件如上
然后我写了一个类:如下:
import org.springframework.aop.MethodBeforeAdvice; import org.springframework.aop.ThrowsAdvice; public class BaseBeforeAdvice implements MethodBeforeAdvice{ @Override public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable { System.out.println("******************"); System.out.println(arg0.getName()); System.out.println("******************"); }
小弟不明白这个方法和这种有什么区别:
@Aspect public class wqAdvice { @Pointcut("execution (* com.XX.*.XX.*(..))") private void myXXCut(){} @Before("myXXCut()") public void doBefore(){ System.out.println("before"); } @AfterReturning(pointcut="myXXCut()",returning="result") public void doAfter(String result){ System.out.println("atfer"+result); } @AfterThrowing(pointcut=" myXXCut()",throwing="e") public void doThrowing(Exception e){ System.out.println("Exception"+e.getMessage()); } }
疑惑颇重,希望大牛们指点小弟一下
2011年8月10日 16:52
2个答案 按时间排序 按投票排序
-
采纳的答案
引用
spring 中的<aop:advisor>和<aop:aspect>有什么区别?
在AOP中有几个概念:
— 方面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象。事务管理是J2EE应用中一个很好的横切关注点例子。方面用Spring的Advisor或拦截器实现。
— 连接点(Joinpoint):程序执行过程中明确的点,如方法的调用或特定的异常被抛出。
— 通知(Advice):在特定的连接点,AOP框架执行的动作。各种类型的通知包括“around”、“before”和“throws”通知。
— 切入点(Pointcut):指定一个通知将被引发的一系列连接点的集合。AOP框架必须允许开发者指定切入点,例如,使用正则表达式。
所以“<aop:aspect>”实际上是定义横切逻辑,就是在连接点上做什么,“<aop:advisor>”则定义了在哪些连接点应用什么<aop:aspect>。Spring这样做的好处就是可以让多个横切逻辑(即<aop:aspect>定义的)多次使用,提供可重用性。
你后面的两个类实际上就是实现横切逻辑的不同方式,一种需要实现特定接口,一种以POJO + Annotation , 在功能上没有太大差别,只是方式不同。2011年8月10日 17:23
-
1、Adivisor是一种特殊的Aspect,Advisor代表spring中的Aspect
2、区别:advisor只持有一个Pointcut和一个advice,而aspect可以多个pointcut和多个advice2011年8月10日 17:59
相关推荐
本文旨在深入探讨Spring AOP中的两个核心概念:`Aspect`与`Advisor`的区别,并通过具体的配置示例帮助读者更好地理解和应用这些概念。 #### 二、Aspect的概念解析 1. **定义**: - `Aspect`在Spring AOP中被称为...
使用`<aop:before>`、`<aop:after>`、`<aop:after-returning>`、`<aop:after-throwing>`和`<aop:around>`元素定义不同类型的的通知,例如: ```xml <aop:aspect id="loggingAspect" ref="loggingAspectBean"> <aop...
- `<aop:before>`、`<aop:after>`、`<aop:after-returning>`、`<aop:after-throwing>` 和 `<aop:around>`:分别用于定义不同类型的切面通知。 - `<aop:pointcut>`:定义切入点表达式,可以引用在通知中。 - `<aop:...
- `<aop:before>`、`<aop:after>`、`<aop:around>`等:分别用于定义不同类型的通知。 **5. 示例** ```xml <aop:config> <aop:aspect ref="myAspect"> <aop:before method="beforeAdvice" pointcut="execution(* ...
3. `<aop:before>`、`<aop:after>`、`<aop:around>`、`<aop:after-returning>`和`<aop:after-throwing>`:这些元素分别用于定义前置通知、后置通知、环绕通知、返回后通知和异常后通知。 4. `<aop:pointcut>`:定义...
5. `<aop:before>`, `<aop:after>`, `<aop:around>`, `<aop:after-returning>`, `<aop:after-throwing>`:这些子元素分别定义了不同类型的通知。例如,`<aop:before>`定义了一个前置通知,它在目标方法执行前运行;`...
标题 "aop:aspect" 指涉的是Spring框架中的面向切面编程(Aspect-Oriented Programming, AOP)的一个核心概念。在Spring AOP中,`aop:aspect`是XML配置中定义一个切面的元素,它允许我们将关注点(如日志、事务管理...
在Spring的XML配置文件中,我们可以创建一个`<aop:config>`元素,并在其内部定义`<aop:advisor>`来创建Advisor。Advisor的`advice-ref`属性用于指定通知bean的ID,`pointcut-ref`属性用于指定切点bean的ID。 2. ...
4. `<aop:before>`、`<aop:after>`、`<aop:around>`、`<aop:after-returning>`、`<aop:after-throwing>`:这些标签分别定义了在目标方法执行前、执行后(无论是否抛出异常)、环绕执行、正常返回后和抛出异常后执行...
4. `<aop:before>`、`<aop:after>`、`<aop:around>`、`<aop:after-returning>`和`<aop:after-throwing>`:分别用于定义在目标方法执行前、后、环绕、成功返回和抛出异常时执行的通知。 四、AOP术语 - 切面(Aspect...
在XML配置中,我们可以使用`<aop:before>`、`<aop:after>`、`<aop:after-returning>`、`<aop:after-throwing>`和`<aop:around>`标签来定义不同类型的通知。 连接点(Join Point)是通知插入到应用程序中的位置,...
在Spring的配置文件(如`applicationContext.xml`)中,你需要定义一个`<aop:config>`标签来开启AOP支持。例如: ```xml <aop:config> </aop:config> ``` 然后,你需要定义切点(Pointcut),这决定了哪些方法会被...
3. **<aop:before>,<aop:after>,<aop:after-returning>,<aop:after-throwing>,<aop:around>**:分别定义不同类型的的通知。 4. **<aop:pointcut>**:定义切入点表达式,可以引用到多个通知中。 5. **<aop:args...
- `<aop:before>`、`<aop:after>`、`<aop:around>`、`<aop:after-returning>` 和 `<aop:after-throwing>`:这些元素分别对应不同的通知类型,用于配置通知的行为。 - `<aop:pointcut>`:定义切入点,通过`id`属性...
在Spring配置文件中,我们可以使用`<aop:config>`元素来声明切面,`<aop:pointcut>`定义切点,`<aop:advisor>`或`<aop:aspect>`定义通知。 例如,下面是一个简单的切面定义: ```xml <aop:config> <aop:pointcut ...
然后,我们可以创建`<aop:aspect>`定义切面,`<aop:before>`, `<aop:after>`, `<aop:around>`, `<aop:after-returning>`, `<aop:after-throwing>`定义不同的通知类型。`<aop:pointcut>`用于定义切点,`id`属性是唯一...
在XML中,我们使用`<aop:before>`, `<aop:after>`, `<aop:around>`等元素定义不同类型的通知。例如,定义一个前置通知: ```xml <aop:before method="beforeAdvice" pointcut-ref="serviceMethods"/> ``` 这里的...
使用`<aop:before>`, `<aop:after>`, `<aop:around>`, `<aop:after-returning>`, `<aop:after-throwing>`等标签定义不同类型的通知,`pointcut-ref`引用之前定义的切入点,`method`指定在哪个切面类的方法中执行通知...
3. **创建通知**:使用`<aop:before>`, `<aop:after>`, `<aop:around>`, `<aop:after-returning>`, `<aop:after-throwing>`等元素定义不同类型的通知。例如,创建一个前置通知: ```xml <aop:before method=...