Spring依存関係を注入する4つの方法


注入スプリングの依存関係
スプリングは、走査素子によって自動的にbeanを生成し、スプリング容器にこれらのbeanを格納および管理する.
beanを自動的に生成する場合,スプリング内部に依存関係を自動的に注入する4つの方法がある.ちょっとお伺いします.
1.注入構造関数
これは生成者によって依存関係を注入する方法である.
依存関係は不変であるか、必要な依存関係に用いられる.
@Component
public class TestServiceImpl implements TestService{
    private final TestRepository testRepository;
    private final TestPolicy testPolicy;

    @Autowired //생성자가 1개일 경우 생략 가능
    public TestServiceImpl(TestRepository testRepository, TestPolicy testPolicy) {
        this.testRepository = testRepository;
        this.testPolicy = testPolicy;
    }
}
コンストラクション関数がある場合は、@Autowiredを省略できます.
lombokを使用する場合、@RequiredArgsConstructorでコードを簡略化できます.
@Component
@RequiredArgsConstructor
public class TestServiceImpl implements TestService{
    private final TestRepository testRepository;
    private final TestPolicy testPolicy;
}
2.注入修正者
これは,修正者(setter)によって依存関係を注入する方法である.
依存関係を選択的に注入したり、変更可能な依存関係に使用したりします.
setterは公開されるので、変更できる人がいるので、いい方法ではありません.
@Component
public class TestServiceImpl implements TestService{
    private TestRepository testRepository;
    private TestPolicy testPolicy;

    @Autowired
    public void setTestRepository(TestRepository testRepository) {
        this.testRepository = testRepository;
    }

    @Autowired
    public void setTestPolicy(TestPolicy testPolicy) {
        this.testPolicy = testPolicy;
    }
}
スプリングアイテムを起動するときに何も注入する必要がない場合は、'@Autowired(required=false)を指定するだけです.
3.現場注入
フィールドに直接注入する方法.
コードは簡潔で使いやすいが、外注できず、テストしにくい.
欠点はDIフレームがないと何もできないことです.
あると知っているから、使わないでください.(テスト時使用OK)
@Component
public class TestServiceImpl implements TestService{
    @Autowired
    private TestRepository testRepository;

    @Autowired
    private TestPolicy testPolicy;
}
4.一般的な方法で注入
一般的な方法で注入する方法.
普通は使いません.
参考までに使用しないでください.
@Component
public class TestServiceImpl implements TestService{
    private TestRepository testRepository;

    private TestPolicy testPolicy;

    @Autowired
    public void init(TestRepository testRepository, TestPolicy testPolicy) {
        this.testRepository = testRepository;
        this.testPolicy = testPolicy;
    }
}
コンテンツソース:https://www.inflearn.com/users/@yh