***
3173 ワード
作者:一字马胡
注釈を使ってアプリケーションを開発するのは素晴らしい開発体験で、1つの注釈だけで私たちのニーズを満たすために多くの仕事を完成することができます.これはどんなに奇妙ですか.例えばlombokは素晴らしい注釈ツールであり、@Setter注釈だけでクラスのすべてのメンバーにsetメソッドを追加することができます.lombokがなければ、例えば100フィールドのdomainクラスに対して、IDEがsetコードを自動的に生成する機能があっても、100 setメソッドのコード量はかなり大きいです.また、domainにはsetメソッドだけでなくgetメソッド、必要な構造メソッドなどが必要です.そうすると、このクラスには200以上の「役に立たない」ように見えるメソッドがあります.このクラスはどうしても「肥大化している」のですが、lombokを使うには、数行のコードしか必要ありません.簡単です.
本文は主にSpring/SpringBootプロジェクトで使用されている一般的な注釈をまとめ、注釈の意味、使用方法、使用提案、およびいくつかのハイエンドの使い方の探求を含むいくつかの注釈を深く分析します.Springを使用してプロジェクト開発を行っている場合は、XMLを使用するのは間違いありませんが、SpringBootを使用してアプリケーションを導入している場合は、やはりXMLの配置方式を捨てて、注釈を使ってあなたの応用をもっと軽くて分かりやすいようにすることをお勧めします.
@Import注記
この注釈は非常にすごい注釈で、いくつかのbeanをIOCコンテナにロードすることができ、他の多くの注釈、例えば@EnableAutoConfiguration、@EnableSchedulingなどはこの注釈を使ってそれぞれの機能を実現しています.この注釈と同様の注釈には@ImportResourceがありますが、@ImportResource注釈はxmlリソースファイルのbeanをIOCコンテナにロードし、@Importは注釈から具体的なbeanを解析してIOCコンテナにロードしますが、この2つの注釈の本質は同じです.
@Importでは、3つの方法でbeanをロードできます.次に、この3つのbeanの使用について説明します.(1)直接@Importのvalueパラメータにロードするインスタンスクラスを記入します.たとえば、クラスAがロードされる必要がある場合は@Import(value=A.class)を使用し、ロードするインスタンスクラスが複数ある場合は@Import(value={A.class,B.class,C.class...}を使用します.できます. (2)@ImportにカスタムImportSelectorクラスを記入し、selectImportsメソッドでロードする必要があるすべてのクラスのフルネームを返すとよい. (3)@ImportにカスタムのImportBeanDefinitionRegistrarクラスを記入し、registerBeanDefinitionsメソッドにロードするbeanを登録します.一般的には、2つのステップを行うだけです.
{BeanClass}は特定のbeanのタイプに置き換えられ、{beanName}はbeanの特定のidに置き換えられます.
@ImportResource
この注釈の機能は注釈@Importと似ていますが、xmlファイルのbeanをロードするために使用されます.使い方も簡単です.@ImportResourceに具体的なxmlパスを直接記入すればいいです.例えば、次のようにします.
一般的に、この注釈を使用すると、xmlを使用してbeanを構成する必要があります.SpringBootプロジェクトでは、xmlファイルを削除してbeanを構成することをお勧めします.代わりに、注釈を使用してbeanを構成することをお勧めします.@Configuration注釈を使用してクラスがbeanを構成するクラスであることをマークすることができます.そしてこのクラスの具体的な方法で@Bean構成タグを使用するという方法で返される例はbeanとしてIOCコンテナにロードされます.もちろん、これらの注釈の使用と意味は後述します.
@AutoConfigurationPackage注記
@EnableAutoConfiguration注記
まず、この注釈の定義を見てみましょう.
ここにはいくつかの重要な点に注意する必要があります.(1)@AutoConfigurationPackage注記 を使用(2)@Import注記を使用してAutoConfigurationImportSelector.class をロード
注釈を使ってアプリケーションを開発するのは素晴らしい開発体験で、1つの注釈だけで私たちのニーズを満たすために多くの仕事を完成することができます.これはどんなに奇妙ですか.例えばlombokは素晴らしい注釈ツールであり、@Setter注釈だけでクラスのすべてのメンバーにsetメソッドを追加することができます.lombokがなければ、例えば100フィールドのdomainクラスに対して、IDEがsetコードを自動的に生成する機能があっても、100 setメソッドのコード量はかなり大きいです.また、domainにはsetメソッドだけでなくgetメソッド、必要な構造メソッドなどが必要です.そうすると、このクラスには200以上の「役に立たない」ように見えるメソッドがあります.このクラスはどうしても「肥大化している」のですが、lombokを使うには、数行のコードしか必要ありません.簡単です.
本文は主にSpring/SpringBootプロジェクトで使用されている一般的な注釈をまとめ、注釈の意味、使用方法、使用提案、およびいくつかのハイエンドの使い方の探求を含むいくつかの注釈を深く分析します.Springを使用してプロジェクト開発を行っている場合は、XMLを使用するのは間違いありませんが、SpringBootを使用してアプリケーションを導入している場合は、やはりXMLの配置方式を捨てて、注釈を使ってあなたの応用をもっと軽くて分かりやすいようにすることをお勧めします.
@Import注記
この注釈は非常にすごい注釈で、いくつかのbeanをIOCコンテナにロードすることができ、他の多くの注釈、例えば@EnableAutoConfiguration、@EnableSchedulingなどはこの注釈を使ってそれぞれの機能を実現しています.この注釈と同様の注釈には@ImportResourceがありますが、@ImportResource注釈はxmlリソースファイルのbeanをIOCコンテナにロードし、@Importは注釈から具体的なbeanを解析してIOCコンテナにロードしますが、この2つの注釈の本質は同じです.
@Importでは、3つの方法でbeanをロードできます.次に、この3つのbeanの使用について説明します.
// new RootBeanDefinition
RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(${BeanClass});
// bean
registry.registerBeanDefinition(${beanName}, rootBeanDefinition);
{BeanClass}は特定のbeanのタイプに置き換えられ、{beanName}はbeanの特定のidに置き換えられます.
@ImportResource
この注釈の機能は注釈@Importと似ていますが、xmlファイルのbeanをロードするために使用されます.使い方も簡単です.@ImportResourceに具体的なxmlパスを直接記入すればいいです.例えば、次のようにします.
@ImportResource(locations = "classpath:/spring/applicationContext.xml")
一般的に、この注釈を使用すると、xmlを使用してbeanを構成する必要があります.SpringBootプロジェクトでは、xmlファイルを削除してbeanを構成することをお勧めします.代わりに、注釈を使用してbeanを構成することをお勧めします.@Configuration注釈を使用してクラスがbeanを構成するクラスであることをマークすることができます.そしてこのクラスの具体的な方法で@Bean構成タグを使用するという方法で返される例はbeanとしてIOCコンテナにロードされます.もちろん、これらの注釈の使用と意味は後述します.
@AutoConfigurationPackage注記
@EnableAutoConfiguration注記
まず、この注釈の定義を見てみましょう.
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
/**
* Exclude specific auto-configuration classes such that they will never be applied.
* @return the classes to exclude
*/
Class>[] exclude() default {};
/**
* Exclude specific auto-configuration class names such that they will never be
* applied.
* @return the class names to exclude
* @since 1.3.0
*/
String[] excludeName() default {};
}
ここにはいくつかの重要な点に注意する必要があります.