SpringBootサービスにRepositoryを注入
5970 ワード
!!! 勉強のために書いたブログ.不足点についてご提案いただき、感謝に堪えません.
Service ClassにResponsitory Classを注入する方法を理解するために、学習を目的としています.
だからこの問題を解決するためにsetter注入も使います.
また,コンストラクション関数注入を用いる利点は,例えば,テストコードを記述する際に,次の画像のように赤い線をチェックすることである.赤い線を注入する部分が表示されます.新しく作成されると、memberSerivceはリポジトリが必要であることを明確に示します.
文章を書くには、説明が足りないことが多いようです.コードを自分で書くともっと役に立ちます.
最新のスプリングが1つのフィールドしかない場合は@Autowiredを省略できます.上の画像よりも簡単な方法もあります.下の鼻で確認してみます.
memberRepositoryを変更する必要がないのでfinalが追加されます.ジェネレータが作成され、値が指定されていない場合は、ジェネレータに赤い線が生成されます.エラーの発生を確認できるので、原因とも考えられます.
Service ClassにResponsitory Classを注入する方法を理解するために、学習を目的としています.
@Service
@Transactional(readOnly = true):
public class MemberService {
// field injection
@Autowired
private MemberRepository memberRepository;
}
上記のコードは通常よく使われるコードフォーマットです.しかし、いくつかの欠点もあります.基本的には変更不可なので.テスト中にrepositoryを変更する必要がある場合がありますが、現在のコードは使用できません.だからこの問題を解決するためにsetter注入も使います.
🧐setter injection
@Service
@Transactional(readOnly = true)
public class MemberService {
// field injection
private MemberRepository memberRepository;
@Autowired
public void setMemberRepository(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
スプリングは直接注入するのではなく、setterで注入する形です.利点は、テストコードを記述するときに値を注入できることです.欠点は、アプリケーションの実行時にsetMemberRepositoryを変更する人がいる可能性があることです.誰かじゃない...いいですよ.念のため使用しない方が安定します.アプリケーションが正常に動作している間に変更することは不可能です.😎constuctor injection
@Service
@Transactional(readOnly = true)
public class MemberService {
// field injection
private MemberRepository memberRepository;
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
コンストラクション関数注入を使用する場合は、コンストラクション関数によって注入されるため、作成されると完了状態になるため、memberRepositoryをsetに変更することはできません.また,コンストラクション関数注入を用いる利点は,例えば,テストコードを記述する際に,次の画像のように赤い線をチェックすることである.赤い線を注入する部分が表示されます.新しく作成されると、memberSerivceはリポジトリが必要であることを明確に示します.
文章を書くには、説明が足りないことが多いようです.コードを自分で書くともっと役に立ちます.
最新のスプリングが1つのフィールドしかない場合は@Autowiredを省略できます.上の画像よりも簡単な方法もあります.下の鼻で確認してみます.
@Service
@Transactional(readOnly = true)
@RequiredArgsConstructor
public class MemberService {
// field injection
private final MemberRepository memberRepository;
}
@AllArgConstructor言語は使用できますが、finalを追加するフィールドで@RequiredArgConstructorを使用することが望ましいです.requiredはfinalを生成するだけでいいです.🙄なぜfinalを使うのですか?
memberRepositoryを変更する必要がないのでfinalが追加されます.ジェネレータが作成され、値が指定されていない場合は、ジェネレータに赤い線が生成されます.エラーの発生を確認できるので、原因とも考えられます.
Reference
この問題について(SpringBootサービスにRepositoryを注入), 我々は、より多くの情報をここで見つけました https://velog.io/@brianhwang/SpringBoot-Service에서-Repository-injectionテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol