ばね容器
🔷 ばね容器
🔸 ApplicationContextインタフェースをスプリングコンテナと呼びます.
🔸 XMLベース、構文ベースでJava設定クラスを作成できます.
🔸 BeanFactory、ApplicationContextに分けることができます.
ApplicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
🔷 せいせいてつづき
new AnnotationConfigApplicationContext(AppConfig.class);
(すべての@Beanを呼び出して空のリポジトリに保存)
@Configuration
public class AppConfig{
@Bean
public MemberService memberService(){
return new MemberRepository(memberRepository);
}
🔸 ただし,自動登録であれば依存関係の生成と注入のステップは2段階に分けて行われる.🔷 クエリコンテナに登録されている空の
ac.getBeanDefinitionNames() : 스프링에 등록된 모든 빈 이름을 조회
ac.getBean(빈이름, 타입) : 빈 이름, 타입으로 빈 객체(인스턴스)를 조회
➡️ 조회대상 빈이 없으면 NoSuchBeanDefinitionException 발생
* ac.getBean("memberService", MemberServiceImpl.class);
➡️ 구체 타입으로 조회할 수도 있지만, 변경 시 유연성이 떨어진다.
(추상화(역할)에 의존하는 것이 아닌 구현에 의존하는 것.)
🔹 同じタイプの空が複数ある場合
🔸 NoUniqueBeanDefinitionExceptionオカレンス
void findBeanByName(){
MemberRepository memberRepository =
ac.getBean("memberRespository1", MemberRepository.class);
}
➡️ 같은 타입의 빈이 여러 개 있을 경우, 빈 이름을 지정해 줘야 한다.
🔸 すべての特定のタイプを表示void findAllBeanByType(){
Map<String, MemberRepository> beansOfType =
ac.getBeansOfType(MemberRepository.class);
for(String key : beansOfType.keySet()){
System.out.println("key = " + key + ", value = " + beansOfType.get(key));
}
System.out.println("beansOfType = " + beansOfType);
}
🔹 空の継承関係の表示
🔸 親のタイプで検索すると、子供のタイプも一緒に検索されます.Objectタイプ別にクエリーすると、すべてのスプリングシートがクエリーされます.
🔸 複数のサブアイテムがある場合は、NoUniqueDefinitionExceptionが表示されます.
空の名前を指定するか、特定のサブタイプでクエリーするだけです.
🔸 親タイプ(Object)ですべて表示
void findAllBeanByObjectType() {
Map<String, Object> beansOfType = ac.getBeansOfType(Object.class);
for (String key : beansOfType.keySet()) {
System.out.println("key = " + key +
" value=" + beansOfType.get(key));
}
}
https://www.inflearn.com/course/スプリング-コア-原理-基本編#Reference
この問題について(ばね容器), 我々は、より多くの情報をここで見つけました https://velog.io/@hyunbenny/스프링-컨테이너テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol