高速春AOPの実装クラスを書きます
1.注釈が@ServiceのSpringコンテナを追加使用して、トラフィッククラスを定義します。
@Service
publicクラスがMyService {
公共の文字列を印刷(){
System.out.printlnは( "印刷...");
リターン"エンド";
}
}
1.アノテーションを使用してアスペクトクラスを定義し、このようなカットラベル@Aspectとして@Component Springコンテナを、追加クラスを表し、通知の種類を標識するための方法に関する。
通知タイプ
- アドバイスの前に
- アドバイスを返送した後、
- ニュースに戻ります
- 異常の通知
- アドバイスアラウンド
@Aspect
@Component
パブリッククラスMyAspect {
@Pointcut( "実行(* com.xxx.MyService。*(..))")
公共ボイドポイントカット(){
}
@Before( "ポイントカット()")
公共ボイド開始(){
System.out.printlnは( "前置通知")。
}
@After( "ポイントカット()")
公共ボイド端(){
System.out.printlnは( "后置通知")。
}
@AfterReturning( "ポイントカット()")
公共ボイドreturnStart(){
System.out.printlnは( "返回通知")。
}
( "ポイントカット()")@AfterThrowing
公共ボイドexceptionStart(){
System.out.printlnは( "异常通知")。
}
@Around( "ポイントカット()")
パブリックオブジェクトstartAround(ProceedingJoinPointジョインポイント)がThrowableを{スロー
するSystem.out.printlnを( "环绕通知开始")。
オブジェクト進む= joinPoint.proceed(joinPoint.getArgs())。
System.out.println( "环绕通知结束" +進みます)。
進んで返します。
}
}
1.定义启动类
@EnableAspectJAutoProxy
@ComponentScan
パブリッククラスアプリ{
パブリック静的無効メイン(文字列[] args){
AnnotationConfigApplicationContextコンテキスト=新しいAnnotationConfigApplicationContext(App.class)。
たMyServiceサービス= context.getBean(MyService.class)。
System.out.println( "启动");
文字列の印刷= service.print()。
System.out.println(印刷)。
}
}
輸出
開始
開始するにはアドバイスの周りに
事前通知
...印刷を
通知エンドの終わり頃
通知がポスト
知らせるために返された
終了