基于<aop:aspect>与<aop:advisor>的区别

网友投稿 258 2022-09-13


基于<aop:aspect>与<aop:advisor>的区别

目录1、实现方式不同2、使用场景不同小结

在开发过程中,不少有Spring Aop的使用,在面向切面编程时,我们会使用< aop:aspect>;在进行事务管理时,我们会使用< aop:advisor>。那么,对于< aop:aspect>与< aop:advisor>的区别,具体是怎样的呢?

至于两者的区别,网上有很多资料,但是似乎都不能说清楚。

首先,我们需要明确两者的概念。

< aop:aspect>:定义切面(切面包括通知和切点)

< aop:advisor>:定义通知器(通知器跟切面一样,也包括通知和切点)

下面,我们列举两者的几个区别。

1、实现方式不同

< aop:aspect>定义切面时,只需要定义一般的bean就行,而定义< aop:advisor>中引用的通知时,通知必须实现Advice接口。

下面我们举例说明。

首先,我们定义一个uPLwzrDgE接口Sleepable和这个接口的实现Human,代码如下:

public interface Sleepable {

public void sleep();

}

public class Human implements Sleepable {

@Override

public void sleep() {

System.out.println("我要睡觉了!");

}

}

下面是< aop:advisor>的实现方式:

//定义通知

public class SleepHelper implements MethodBeforeAdvice,AfterReturningAdvice{

@Override

public void before(Method arg0, Object[] arg1, Object arg2)

throws Throwable {

System.out.println("睡觉前要脱衣服!");

}

@Override

public void afterReturning(Object arg0, Method arg1, Object[] arg2,

Object arg3) throws Throwable {

System.out.println("起床后要穿衣服!");

}

}

//aop配置

下面是< aop:aspect>的实现方式:

//定义切面

public class SleepHelperAspect{

public void beforeSleep(){

System.out.println("睡觉前要脱衣服!");

}

public void afterSleep(){

System.out.println("起床后要穿衣服!");

}

}

//aop配置

测试代码如下:

public class TestAOP {

public static void main(String[] args) {

method1();

// method2();

}

private static void method1() {

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext1.xml");

Sleepable sleeper = (Sleepable) context.getBean("human");

sleeper.sleep();

}

private static void method2() {

ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext2.xml");

Sleepable sleeper = (Sleepable) context.getBean("human");

sleeper.sleep();

}

//执行结果

睡觉前要脱衣服!

我要睡觉了!

起床后要穿衣服!

}

2、使用场景不同

< aop:advisor>大多用于事务管理。

例如:

< aop:aspect>大多用于日志,缓存

其实,不管是< aop:aduPLwzrDgEvisor>还是< aop:aspect>最终的实现逻辑是一样的。

小结

可以看出,和< aop:aspect>其实都是将通知和切面进行了封装,原理基本上是一样的,只是使用的方式不同而已。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:阿里云互通AWS全球region解决方案(阿里云 aws)
下一篇:WIN7通过BAT脚本设置IP、DNS、WINS(windows .bat脚本教程)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~