Autowiredの動作原理は何ですか?
@Autowiredは、Springフレームワークで使用されるアノテーションであり、Beanの自動装配(つまり自動インジェクション)に使用されます。
@Autowiredアノテーションの原理は、リフレクション機構を使用して、コンテナの起動時に@Autowiredアノテーションが付いているフィールド、コンストラクタ、またはSetterメソッドをスキャンし解析し、そのタイプと名前に応じてコンテナ内で対応するBeanを検索し、自動的に対象オブジェクトに注入することです。
具体の原理は以下のとおりです。
- 最初、コンテナはすべてのBean定義をスキャンし、解析し、BeanDefinitionオブジェクトを作成し、それをBeanFactoryに保存します。
- アプリケーションコンテナが起動すると、BeanPostProcessorのpostProcessBeforeInitializationメソッドが呼び出されます。このメソッドは、すべてのBeanオブジェクトをスキャンし、@Autowiredアノテーションのフィールド、コンストラクタ、またはSetterメソッドを検索します。
- @Autowiredアノテーションが付いているフィールド、コンストラクタ、またはSetterメソッドが見つかった場合、リフレクションを使ってその型と名前を取得します。
- その後、コンテナはタイプと名前に基づいて、BeanFactory内で対応するBeanを検索します。
- 目標オブジェクトに一致するBeanが見つかれば、自動的に注入されます。
- Beanが見つからない場合、例外がスローされます。
複数の一致するBeanが存在する場合、Springフレームワークは優先度や名前などの規則に従って選択し、最も適したBeanを注入します。
要总结的是,@Autowired注解的原理是利用反射机制,容器在启动时会扫描并解析带有@Autowired注解的字段、构造方法或设置方法,然后根据它们的类型和名称在容器中查找对应的Bean,并自动将其注入到目标对象中。