私はまだ深さで春の依存性注入を学んでいます。
私の最初のクラスは、私は豆をロードし、管理するコンテナに宣言した構成クラスは、注釈付きメソッドで宣言されています。
package ioc.question_004;
import ioc.commun.Person;
import ioc.commun.Profession;
import org.springframework.context.annotation.*;
@Configuration
public class MyConfiguration {
@Bean
public Profession profession(){
return Profession.builder()
.name("professor")
.description("professor in the university")
.build();
}
@Bean
public Person person(){
return Person.builder()
.name("Bagna")
.age(52)
.profession(profession())
.build();
}
}
私の第二のクラスは、それが好きに見える、daoRepositoryです。
package ioc.question_008.dao;
import ioc.commun.Person;
import lombok.*;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;
@Repository
@Builder
@Setter
@Getter
@EqualsAndHashCode
@ToString
public class MyDaoRepository implements dao {
List<Person> personList = new ArrayList<>();
@Override
public boolean save( Person person ){
return this.personList.add(person);
}
@Override
public boolean delete( Person person ){
return this.personList.remove(person);
}
}
次のように私の実行中のコードは次のとおりです。
@Configuration
@Import(MyConfiguration.class)
@ComponentScan(basePackageClasses = {MyDaoRepository.class} )
public class DependencyInjection {
public static void main( String[] args ) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DependencyInjection.class);
dao myDaoRepository = (MyDaoRepository) context.getBean("myDaoRepository");
System.out.println(myDaoRepository);
}
}
魔法MyDaoRepositoryは、コンフィギュレーションクラスMyConfigurationで宣言さ@Bean人が含まれています。
MyDaoRepository(personList = [人(名前=バーニャ、年齢= 52、職業=職業(名=教授、説明=大学教授))])
私はそのために要求していない場合でも、コンテナが自動的にこのオブジェクトを注入していることthnik。いくつかの@Autowired注釈は、コンパイラによって追加されることがあります。よく分かりません。
あなたは、私が@Autowired注釈を自分で注射を行うように依頼しない限り、彼らは、コンテナ(例えば豆の人)に存在していても豆注入しないに春のコンテナを依頼することができますどのように私に説明してもらえます。
その理由は、コレクションとロンボク島の春のオートワイヤリングの組み合わせです Builder
まず、@Builder
すべての引数のコンストラクタを追加しますMyDaoRepository(List<Person> list)
。
第二に、春には、自動的にあなたのファクトリメソッドを検知します@Bean public Person person()
。
コンストラクタは、コレクションを期待するので今、春がすべて蓄積しPerson
、それがに見つけることができます-beans List
に応じてリストを設定し、コンストラクタに注入し、それを。
思う(しかし、それは、現在テストされていませんが、文書化し、ここで追加することを、)@Autowired(required = false)
あなたにList<Person> persons
それはオプションであり、春になるではない、それジェクトように、そのマークとして、財産はあなたがこのケースで何をしたいです。(編集:私が間違っていた、あなたはまだ仕事に、このための引数なしのコンストラクタが必要ですが、どのなし@Autowired
。注釈リストはとにかくそのように注入されませんでしたrequired=false
いかなる適切な時に、単純に例外を防ぐPerson
Beanが見つかりません。)
EDIT:ようさんロディ、冷凍エンドウ豆のロディが、指摘、またあなたのBeanを作成するために、春に別のコンストラクタを追加することが可能であろう、とあなたのリポジトリに注釈を付けることにより、例えば @NoArgsConstructor