Spring ComponentScanとComponent
Component Sacn
これまで、ユーザーはAppConfig classで@Beanとして空を管理する必要がありました.しかし、これは開発者にとって面倒で、漏れたら大きな障害になります.したがって、Springには@ComponentScanと@Componentコメントが用意されており、@Beanを使用して登録することなくSpringBeanとして自動的に登録できます.
素子スキャンを使用するとDIがぼやけてしまいます.これまで,我々は手動で依存関係を注入してきたが,Benは自動的に登録され,依存関係を確立できる部分が消えることを意味している.したがって@Autowiredコメントはサポートされています.@Autowiredについては、後で学習します.
コンポーネントスキャンの適用 既存のAppConfigのようにDIを設定せずに@Beanとして登録します.@ComponentSacnのみで終了しますが、私と同じ例を作成している場合は、必ずexcluddeFilterと入力してください.これは、AppConfigというSpringコンテナを作成し、同時に登録しないように設定したためです.
@Configuration
@ComponentScan(
//우리가 이미 등록해놓은 AppConfig를 등록하지 않도록
excludeFilters = @ComponentScan.Filter(
type = FilterType.ANNOTATION,
classes = Configuration.class)
)
public class AutoAppConfig { }
AppConfigと同じ場所にAutoAppConfigクラスを作成し、次のように設定します.
コンポーネントを適用して、管理する空のクラスに@Componentを貼り付けてみます.これにより、@ComponentScanはSpringコンテナに登録できます.また、ここでコンテナを登録する場合、デフォルトの空の名前ポリシーがあり、最初の文字を小文字に変換すると、すべての文字が空になります.上記の例では、MemberServiceImpl->MemberServiceImplとして登録されています.また、空の名前を直接登録することもできます.@Component(「空の名前」)に登録すると、@Beanに登録したときに名前を変更するように使用できます.
@Component
public class MemberServiceImpl implements MemberService{
private final MemberRepository memberRepository;
@Autowired public MemberServiceImpl(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
@Override
public void join(Member member) {
memberRepository.save(member);
}
@Override public Member findMember(Long memberId) {
return memberRepository.findById(memberId);
}
//테스트용
public MemberRepository getMemberRepository(){
return memberRepository;
}
}
コンポーネントスキャンのナビゲーション位置はbasepackagesで指定できます.プロジェクト構造が本当に必要な場合は、それを使用することをお勧めします.BasePackagesのデフォルト値は@ComponentScanのクラスのpackage値をdefaultとして使用するため、Spring Bootでデフォルトで提供されているプロジェクト構造をプロジェクトの最上位に指定することを通常お勧めします.
@ComponentScan( basePackages = "hello.core", }
@Contorller, @Service, @Repository@SpringBootApplication @Service
ここでプロジェクトをしたり、会社でプロジェクトをしたりすることを学んだ人は?私たちのプロジェクトは@Componentも@ComponentSacnも書いていませんが、いったいどうやってスプリング容器を使ったのでしょうか.うちの会社は単一の色調でデザインされているのではなく、無限にオブジェクトを生成しているのでしょうか??终わりを感じるかもしれない本当はそうじゃないSpringBootプロジェクトの場合、最初の@SpringBootアプリケーションには@ComponentScan、@Controllerおよび@Service、および@Repositoryには@Componentが含まれます.
Filter
@ComponentScan(
includeFilters = @Filter(
type = FilterType.ANNOTATION,
classes = IncludeComponent.class
),
excludeFilters = @Filter(
type = FilterType.ANNOTATION,
classes = ExcludeComponent.class
)
)
フィルタを使用して、構成部品のスキャンターゲットに追加または除外できます.
重複登録との競合
素子スキャンで同じ名前の空を繰り返し登録したらどうなりますか?
출처
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8Reference
この問題について(Spring ComponentScanとComponent), 我々は、より多くの情報をここで見つけました https://velog.io/@ililil9482/Spring-ComponentScan과-Componentテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol