0 0

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个答案 按时间排序 按投票排序

0 0

采纳的答案

引用

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
0 0

1、Adivisor是一种特殊的Aspect,Advisor代表spring中的Aspect
2、区别:advisor只持有一个Pointcut和一个advice,而aspect可以多个pointcut和多个advice

2011年8月10日 17:59

相关推荐

    SPRING:aspect和advisor区别

    本文旨在深入探讨Spring AOP中的两个核心概念:`Aspect`与`Advisor`的区别,并通过具体的配置示例帮助读者更好地理解和应用这些概念。 #### 二、Aspect的概念解析 1. **定义**: - `Aspect`在Spring AOP中被称为...

    spring aop注解方式、xml方式示例

    使用`&lt;aop:before&gt;`、`&lt;aop:after&gt;`、`&lt;aop:after-returning&gt;`、`&lt;aop:after-throwing&gt;`和`&lt;aop:around&gt;`元素定义不同类型的的通知,例如: ```xml &lt;aop:aspect id="loggingAspect" ref="loggingAspectBean"&gt; &lt;aop...

    spring aop管理xml版

    - `&lt;aop:before&gt;`、`&lt;aop:after&gt;`、`&lt;aop:after-returning&gt;`、`&lt;aop:after-throwing&gt;` 和 `&lt;aop:around&gt;`:分别用于定义不同类型的切面通知。 - `&lt;aop:pointcut&gt;`:定义切入点表达式,可以引用在通知中。 - `&lt;aop:...

    springAop的配置实现

    - `&lt;aop:before&gt;`、`&lt;aop:after&gt;`、`&lt;aop:around&gt;`等:分别用于定义不同类型的通知。 **5. 示例** ```xml &lt;aop:config&gt; &lt;aop:aspect ref="myAspect"&gt; &lt;aop:before method="beforeAdvice" pointcut="execution(* ...

    Spring中Aop的使用包括xml和注解

    3. `&lt;aop:before&gt;`、`&lt;aop:after&gt;`、`&lt;aop:around&gt;`、`&lt;aop:after-returning&gt;`和`&lt;aop:after-throwing&gt;`:这些元素分别用于定义前置通知、后置通知、环绕通知、返回后通知和异常后通知。 4. `&lt;aop:pointcut&gt;`:定义...

    征服Spring AOP—— Schema

    5. `&lt;aop:before&gt;`, `&lt;aop:after&gt;`, `&lt;aop:around&gt;`, `&lt;aop:after-returning&gt;`, `&lt;aop:after-throwing&gt;`:这些子元素分别定义了不同类型的通知。例如,`&lt;aop:before&gt;`定义了一个前置通知,它在目标方法执行前运行;`...

    aop:aspect

    标题 "aop:aspect" 指涉的是Spring框架中的面向切面编程(Aspect-Oriented Programming, AOP)的一个核心概念。在Spring AOP中,`aop:aspect`是XML配置中定义一个切面的元素,它允许我们将关注点(如日志、事务管理...

    使用Spring配置文件实现AOP

    在Spring的XML配置文件中,我们可以创建一个`&lt;aop:config&gt;`元素,并在其内部定义`&lt;aop:advisor&gt;`来创建Advisor。Advisor的`advice-ref`属性用于指定通知bean的ID,`pointcut-ref`属性用于指定切点bean的ID。 2. ...

    对Spring的AOP标签的支持

    4. `&lt;aop:before&gt;`、`&lt;aop:after&gt;`、`&lt;aop:around&gt;`、`&lt;aop:after-returning&gt;`、`&lt;aop:after-throwing&gt;`:这些标签分别定义了在目标方法执行前、执行后(无论是否抛出异常)、环绕执行、正常返回后和抛出异常后执行...

    Spring 2.5 AOP 例子

    4. `&lt;aop:before&gt;`、`&lt;aop:after&gt;`、`&lt;aop:around&gt;`、`&lt;aop:after-returning&gt;`和`&lt;aop:after-throwing&gt;`:分别用于定义在目标方法执行前、后、环绕、成功返回和抛出异常时执行的通知。 四、AOP术语 - 切面(Aspect...

    Spring AOP 的实现例子(基于XML配置实现)

    在XML配置中,我们可以使用`&lt;aop:before&gt;`、`&lt;aop:after&gt;`、`&lt;aop:after-returning&gt;`、`&lt;aop:after-throwing&gt;`和`&lt;aop:around&gt;`标签来定义不同类型的通知。 连接点(Join Point)是通知插入到应用程序中的位置,...

    spring famework 基于xml配置aop示例

    在Spring的配置文件(如`applicationContext.xml`)中,你需要定义一个`&lt;aop:config&gt;`标签来开启AOP支持。例如: ```xml &lt;aop:config&gt; &lt;/aop:config&gt; ``` 然后,你需要定义切点(Pointcut),这决定了哪些方法会被...

    Spring_02_入门篇_AOP_简单实例

    3. **&lt;aop:before&gt;,&lt;aop:after&gt;,&lt;aop:after-returning&gt;,&lt;aop:after-throwing&gt;,&lt;aop:around&gt;**:分别定义不同类型的的通知。 4. **&lt;aop:pointcut&gt;**:定义切入点表达式,可以引用到多个通知中。 5. **&lt;aop:args...

    springaop+arg

    - `&lt;aop:before&gt;`、`&lt;aop:after&gt;`、`&lt;aop:around&gt;`、`&lt;aop:after-returning&gt;` 和 `&lt;aop:after-throwing&gt;`:这些元素分别对应不同的通知类型,用于配置通知的行为。 - `&lt;aop:pointcut&gt;`:定义切入点,通过`id`属性...

    SpringAOP1.zip

    在Spring配置文件中,我们可以使用`&lt;aop:config&gt;`元素来声明切面,`&lt;aop:pointcut&gt;`定义切点,`&lt;aop:advisor&gt;`或`&lt;aop:aspect&gt;`定义通知。 例如,下面是一个简单的切面定义: ```xml &lt;aop:config&gt; &lt;aop:pointcut ...

    spring注解&XML配置AOP

    然后,我们可以创建`&lt;aop:aspect&gt;`定义切面,`&lt;aop:before&gt;`, `&lt;aop:after&gt;`, `&lt;aop:around&gt;`, `&lt;aop:after-returning&gt;`, `&lt;aop:after-throwing&gt;`定义不同的通知类型。`&lt;aop:pointcut&gt;`用于定义切点,`id`属性是唯一...

    spring_aop_xml.rar_java aop_xml aop

    在XML中,我们使用`&lt;aop:before&gt;`, `&lt;aop:after&gt;`, `&lt;aop:around&gt;`等元素定义不同类型的通知。例如,定义一个前置通知: ```xml &lt;aop:before method="beforeAdvice" pointcut-ref="serviceMethods"/&gt; ``` 这里的...

    spring使用动态代理面向切面编程(AOP) xml

    使用`&lt;aop:before&gt;`, `&lt;aop:after&gt;`, `&lt;aop:around&gt;`, `&lt;aop:after-returning&gt;`, `&lt;aop:after-throwing&gt;`等标签定义不同类型的通知,`pointcut-ref`引用之前定义的切入点,`method`指定在哪个切面类的方法中执行通知...

    spring xml方式配置aop

    3. **创建通知**:使用`&lt;aop:before&gt;`, `&lt;aop:after&gt;`, `&lt;aop:around&gt;`, `&lt;aop:after-returning&gt;`, `&lt;aop:after-throwing&gt;`等元素定义不同类型的通知。例如,创建一个前置通知: ```xml &lt;aop:before method=...

Global site tag (gtag.js) - Google Analytics