トランザクション管理の間に、私たちは<AOP:顧問>を使用します。:開発中に、使用春Aopと、指向プログラミングの多くがあり、私たちは<側面AOP>を使用します。だから、のために<AOP:側面>と:違い<AOP顧問>は、具体的には何ですか?
両者の違いについては、そこに多くの情報はオンラインですが、それは明確に見えることはできません。
まず、我々は両方の明確なコンセプトを必要としています。
- <量Aop:態様>:(通知部と接する点を含む)を規定する側面
- <量Aop:アドバイザ>:定義通知(通知および接点を含む断面のような通知)
以下に、我々は2つの間にいくつかの相違点をリストアップ。
図1に示すように、異なる実施
<量Aop:アスペクト>定義セクションのみ<AOP:アドバイザ>定義され、ライン上の一般的な豆を定義する必要が通知で参照通知アドバイスインタフェースを実装する必要があります。
ここでは、説明します。
次のようにまず、ヒューマンインタフェースSleepableを定義し、このインタフェースを実装し、コードは次のとおりです。
public interface Sleepable {
public void sleep();
}
public class Human implements Sleepable {
@Override
public void sleep() {
System.out.println("我要睡觉了!");
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
<:顧問AOP>の実装次のとおりです。
//定义通知
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配置
<bean id="sleepHelper" class="com.ghs.aop.SleepHelper"></bean>
<aop:config>
<aop:pointcut expression="execution(* *.sleep(..))" id="sleepPointcut"/>
<aop:advisor advice-ref="sleepHelper" pointcut-ref="sleepPointcut"/>
</aop:config>
<bean id="human" class="com.ghs.aop.Human"/>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
<:態様AOP>実装以下の通りです。
//定义切面
public class SleepHelperAspect{
public void beforeSleep(){
System.out.println("睡觉前要脱衣服!");
}
public void afterSleep(){
System.out.println("起床后要穿衣服!");
}
}
//aop配置
<bean id="sleepHelperAspect" class="com.ghs.aop.SleepHelperAspect"></bean>
<aop:config>
<aop:pointcut expression="execution(* *.sleep(..))" id="sleepPointcut"/>
<aop:aspect ref="sleepHelperAspect">
<!--前置通知-->
<aop:before method="beforeSleep" pointcut-ref="sleepPointcut"/>
<!--后置通知-->
<aop:after method="afterSleep" pointcut-ref="sleepPointcut"/>
</aop:aspect>
</aop:config>
<bean id="human" class="com.ghs.aop.Human"/>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
次のようにテストコードがあります:
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();
}
//执行结果
睡觉前要脱衣服!
我要睡觉了!
起床后要穿衣服!
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
2、異なるシーンの使用
主にトランザクション管理のために使用:<Aopと顧問>。
例えば:
<!-- 会重复读,不会脏读事务 -->
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" timeout="120" propagation="REQUIRED" rollback-for="Exception" />
</tx:attributes>
</tx:advice>
<aop:config proxy-target-class="true">
<aop:pointcut id="txPointCut" expression="..."/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="txPointCut" />
</aop:config>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
<Aopとは:側面は>ほとんど伐採、キャッシュに使用します
実際には、それがあるかどうか<AOP:アドバイザ>または<AOP:態様>最終的なインプリメンテーション論理は同じです。
概要:
見られるように、<AOP:顧問>と<AOP:態様は>実際には通知され、パッケージをカットされ、原理は基本的にそれを使用すると同じ、ただ異なった方法です。
添付ファイル:
この問題の理解は、実際には、深い理解されていない、我々は彼らの希望を共有して、以下のいくつかのブログの記事をお勧めします。
http://www.iteye.com/problems/69785
http://blog.sina.com.cn/s/blog_5198c7370100hw1p.html
http://blog.csdn.net/huitoukest/article/details/46469177
HTTP:/ /www.tz365.cn/ask/shenghuo/2016/0804/739237.html
https://zhidao.baidu.com/question/371238289198208804.html