私は Spring AOP に精通していますが、実際の経験はあまりありません。
私の質問は、クラスのすべてではなく一部のメソッドに AOP 機能を持たせたい場合、単一のポイントカットで可能になるかどうかです。たとえば、クラスに save1、save2、get1、get2 の4 つのメソッドがあり、 save1 と save2のみにAOP を適用したい場合、そのための単一のポイントカットを作成するにはどうすればよいでしょうか? ポイントカット式はどのようになりますか? またはそれは可能ですか?
私は Spring AOP に精通していますが、実際の経験はあまりありません。
私の質問は、クラスのすべてではなく一部のメソッドに AOP 機能を持たせたい場合、単一のポイントカットで可能になるかどうかです。たとえば、クラスに save1、save2、get1、get2 の4 つのメソッドがあり、 save1 と save2のみにAOP を適用したい場合、そのための単一のポイントカットを作成するにはどうすればよいでしょうか? ポイントカット式はどのようになりますか? またはそれは可能ですか?
それを行うには多くの方法があります(ワイルドカード式、aspectJアノテーションを使用、..)aspectJの例を挙げます
class MyClass{
@MyPoint
public void save1(){
}
@MyPoint
public void save2(){
}
public void save3(){
}
public void save4(){
}
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyPoint {
}
@Aspect
@Component
public class MyAspect {
@Before("@annotation(com.xyz.MyPoint)")
public void before(JoinPoint joinPoint) throws Throwable {
//do here what u want
}
}
したがって、注釈をマークしている限り、@Mypoint
Spring はこのメソッドのアスペクトの前に呼び出します。Spring があなたではなく、このメソッドとオブジェクトを管理していることを確認してください。クラスパスにspectJを含める
アドバイスを適用するメソッドを選択するには、ポイントカット式を指定する必要があります。
Spring ドキュメントの7.2.3 ポイントカットの宣言を参照し、実行ジョインポイント指定子を使用してメソッドを選択します。