Spring AOPのIntroduction
6655 ワード
文書Spring AOPの用語概要では、
Springは、
例を挙げて説明するインタフェースRunInterface を定義する RunInterfaceインタフェースを定義するデフォルト実装クラスDefaultRunInterface Springを定義するJava構成クラスAppConfig 断面クラスAspectClass を定義するエンティティクラスPerson を定義定義テストクラスTest 試験結果 結果解析
References
Spring Framework 5.2.5 Reference Doc. Spring AOPのIntroduction(@DeclareParents)概要
introduction
はクラスに追加された新しいフィールドまたはメソッド定義を表す.Spring AOPでは、任意のオブジェクトintroduce
(導入)の新しいインタフェースを実装できます.Introduction
の使用方法Springは、
@DeclareParents
(導入)の新しいインタフェース実装を必要とするクラス、およびデフォルトのインタフェース実装タイプを定義する注釈introduce
を提供する.@DeclareParents(value="com.xzy.myapp.service.*+", defaultImpl=DefaultUsageTracked.class) // `com.xzy.myapp.service` `UsageTracked` , `DefaultUsageTracked`
public static UsageTracked mixin;
例を挙げて説明する
public interface RunInterface {
void run();
}
public class DefaultRunInterface implements RunInterface {
@Override
public void run() {
System.out.println("default run method");
}
}
@Configuration
@EnableAspectJAutoProxy
@ComponentScan
public class AppConfig {}
@Aspect
@Component
public class AspectClass {
@DeclareParents(value = "com.qyh.test.introduction.Person", defaultImpl = DefaultRunInterface.class)
private RunInterface runInterface;
}
@Component
public class Person {}
public class Test {
public static void main(String[] args) {
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
RunInterface person = applicationContext.getBean("person", RunInterface.class);
person.run();
}
}
default run method
AspectClass
において、Introduction
クラスがPerson
を実装するようにRunInterface
を定義したので、容器内のperson
インスタンスはRunInterface
タイプに変換され、run()
メソッドを呼び出すと、RunInterface
のデフォルト実装DefaultRunInterface
のrun()
メソッドが呼び出される.person
のインスタンスにrun()
の方法を追加したことに相当する.References
Spring Framework 5.2.5 Reference Doc. Spring AOPのIntroduction(@DeclareParents)概要