English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
コンポーネントスキャンを使用する場合、XML設定でスキャンするパスを指定する必要があります
<context:component-scan back-package="yangjq.test">
コンテナのインスタンス化時にyangjq.testパッケージおよびそのサブパッケージのすべてのコンポーネントクラスをスキャンします。
これらのコンポーネントクラスがスキャンされるのは、クラス定義の前に以下のアノテーションマークがある場合のみです
- @Component 通用アノテーション
- @Name 通用アノテーション
- @Repository 持続可能レイヤコンポーネントアノテーション
- @Service ビジネスレイヤコンポーネントアノテーション
- @Controller コントローラーレイヤコンポーネントアノテーション
命名
コンポーネントのスキャンプロセスでは、デフォルトのID値(小文字で始まるクラス名)が生成されますが、アノテーションマーク内でID値をカスタマイズすることもできます。例えば:
//これはデフォルトのIDで、値はOracleUserDaoです @Repository public class OracleUserDao implements UserDao{ } //これはカスタムIDで、値はloginServiceです @Service("loginService") public class UserService{ }
コンポーネントの範囲
Springで管理されるコンポーネントは通常デフォルトの範囲は"singleton"ですが、他の範囲が必要な場合は@Scopeアノテーションを使用し、アノテーション内で範囲の名前を提供するだけで良いです。
@Scope("prototype") @Repository public class OracleUserDao implements UserDao{ }
初期化と破棄
@PostConstructおよび@PreDestroyアノテーションは、初期化および破棄のカールバックメソッドを指定するために使用されます。例えば:
public class ExampleBean{ @PostConstruct public void init(){ //.......初期化 } @PreDestroy public void destroy(){ //........破棄 } }
依存関係注入関係を持つBeanのアノテーション
これらのいずれかを使用して依存関係注入を実現できます
- @Resource
- @AutoWired/@Qualifier
- @Inject/@Named
通常、@Resourceがよく使用されます。@Resourceについて説明します。他のものを使用する場合は、使用時に検索してください
@Resource アノテーションはフィールド定義やsetterメソッドの定義の前に使用できます。デフォルトでは、まず名前で一致する注入が行われ、次にタイプで一致する注入が行われます
public class UserSerivce{ //@Resource これはフィールド定義に使用されます private UserDao userDao; @Resource //これはsetterメソッドの前に使用されます public void setUserDao(UserDao dao){ this.UserDao=dao; } }
複数のマッチングBeanがある場合、注入がエラーが発生します。名前を明示的に指定することができます。例えば、@Resource(name="exampleDao").
まとめ
これで本文における注釈ベースのコンポーネントスキャンの詳細な内容はすべて終わります。皆様に役立つことを願っています。興味を持たれた方、本サイトの他の関連トピックもご覧ください。不十分な点があれば、コメントをお願いします。皆様のサポートに感謝します。
声明:本文の内容はインターネットから取得しており、著作権者に帰属します。インターネットユーザーが自発的に貢献し、自己でアップロードしたものであり、本サイトは所有権を有しておらず、編集も行われていません。著作権侵害が疑われる内容がある場合は、メールを送信して:notice#oldtoolbag.com(メールを送信する際、#を@に置き換えてください。報告を行い、関連する証拠を提供してください。一旦確認がとりたいとされると、本サイトは直ちに侵害が疑われるコンテンツを削除します。)