μ»΄ν¬λνΈ μ€μΊκ³Ό μλ μμ‘΄κ΄κ³ μ€μ
μ€νλ§ λΉ(Spring Bean)
Spring 컨ν
μ΄λκ° κ΄λ¦¬νλ μλ° κ°μ²΄μ΄λ€.
μμ μλ° λ¬Έλ²μΌλ‘ μμ±ν κ°μ²΄λ μ€νλ§ λΉμ΄ μλκΈ° λλ¬Έμ, μ€νλ§ λΉμΌλ‘ λ±λ‘μ ν΄μΌ Spring 컨ν
μ΄λκ° μΈμν μ μλ€.
μ€νλ§ λΉμ λ±λ‘νλ 2κ°μ§ λ°©λ²
1.
μ΄λ
Έν
μ΄μ
μ νμ©ν μ»΄ν¬λνΈ μ€μΊκ³Ό Autowired μ€μ
2.
μλ° μ½λλ‘ μ§μ μ€νλ§ λΉ λ±λ‘νκΈ°
μ λ°μ μΈ νλ¦μ μλμ κ°λ€.
memberController μμλ memberService κ°μ²΄λ₯Ό μ¬μ©ν΄μΌνκ³ ,
memberService μμλ memberRepository κ°μ²΄λ₯Ό μ¬μ©ν΄μΌνλ€.
λ°λΌμ memberController κ° μμ±λ λ μ€νλ§ μ»¨ν
μ΄λμμ memberController μ memberService κ°μ²΄λ₯Ό μ£Όμ
ν΄μ£Όκ³ ,
memberService κ° μμ±λ λλ memberService μ memberRepository κ°μ²΄λ₯Ό μ£Όμ
ν΄μ€λ€.
μ°μ μ 1. μ΄λ
Έν
μ΄μ
μ νμ©ν μ»΄ν¬λνΈ μ€μΊκ³Ό Autowired μ€μ λ°©λ²μΌλ‘ μ€νλ§ λΉμ λ±λ‘νλ λ°©λ²μ μμ보μ.
controller ν¨ν€μ§μμ MemberControllerμ μμ±νλ€.
MemberController μμλ memberService λ₯Ό μ£Όμ
λ°μμΌ νλ€.
controller/MemberController.java
@Controller // @Controller μ΄λ
Έν
μ΄μ
μ΄ μμΌλ©΄ μ€νλ§ μ»¨ν
μ΄λκ° ν΄λΉ 컨νΈλ‘€λ¬λ₯Ό μμ±ν΄μ κ΄λ¦¬ν΄μ€
public class MemberController {
private final MemberService memberService;
@Autowired // @Autowired μ΄λ
Έν
μ΄μ
μ μν΄ μ€νλ§μ΄ memberService λ₯Ό κ°μ Έλ€κ° 컨νΈλ‘€λ¬μ μ°κ²°ν΄μ€
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
Java
볡μ¬
Β @Controller μ΄λ
Έν
μ΄μ
μ λ¬μμ€μΌ μ€νλ§ μ»¨ν
μ΄λμ μ€νλ§ λΉμΌλ‘ λ±λ‘λλ€.
Β @Autowired μ΄λ
Έν
μ΄μ
μ μμ±μ μμ λ¬μμ£Όλ©΄, ν΄λΉ κ°μ²΄κ° μμ±λ λ μΈμλ‘ λ€μ΄μ€λ μ€νλ§ λΉ κ°μ²΄λ₯Ό μμ‘΄μ± μ£Όμ
μμΌμ€λ€.
β MemberController κ°μ²΄κ° μμ±λ λ μ€νλ§ λΉμΌλ‘ λ±λ‘λ memberService κ°μ²΄κ° μμ‘΄μ± μ£Όμ
λ¨
οΈ κ·Έλ°λ° memberService μλμ λΉ¨κ° μ€μ΄ μ³μ Έ μλ€. μ΄μ λ MemberService λ νμ¬ μ€νλ§ λΉμ λ±λ‘ μ λ μμν μλ° ν΄λμ€ μ΄κΈ° λλ¬Έμ΄λ€. (μλ μ½λ μ°Έκ³ )
νμ¬ MemberService ν΄λμ€λ μ€νλ§ λΉμ λ±λ‘μ΄ μ λ μμν μλ° ν΄λμ€μ
MemberService ν΄λμ€ μμ @Service μ΄λ
Έν
μ΄μ
μ λ¬μμ£Όλ©΄ MemberService κ° μ€νλ§ λΉμ λ±λ‘λλ€.
λν MemberService μμλ memberRepository λ₯Ό μ£Όμ
λ°μμΌ νλ―λ‘ MemberService μμ±μμ @Autowired μ΄λ
Έν
μ΄μ
μ λ¬μμ€λ€.
service/Memberservice.java
@Service
public class MemberService {
// ν
μ€νΈμ½λμμ μμ‘΄μ± μ£Όμ
(DI) λ°κΈ° μν¨
private final MemberRepository memberRepository;
// μμ±μ
@Autowired // MemberService κ°μ²΄λ₯Ό μμ±ν λ, memberRepository μμ‘΄μ± μ£Όμ
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
// μλ΅ ..
}
Java
볡μ¬
Β @Service @Autowired μ΄λ
Έν
μ΄μ
μ λ¬μμ€λ€.
Β @Service μ΄λ
Έν
μ΄μ
μ λ¬μμ€μΌ μ€νλ§ μ»¨ν
μ΄λμ μ€νλ§ λΉμΌλ‘ λ±λ‘λλ€.
λ§μ§λ§μΌλ‘ MemberRepository μ ꡬνμ²΄μΈ MemoryMemberRepository.java νμΌμλ μ΄λ
Έν
μ΄μ
μ λ¬μμ€λ€.
@Repository
public class MemoryMemberRepository implements MemberRepository{
// μλ΅ ..
}
Java
볡μ¬
μ¬κΈ°μλ μ£Όμ
λ°μ κ°μ²΄κ° μμΌλ―λ‘ @Autowired λ νμμκ³ @Repository μ΄λ
Έν
μ΄μ
λ§ λ¬μμ€λ€.
Β @Repository μ΄λ
Έν
μ΄μ
μ λ¬μμ€μΌ μ€νλ§ μ»¨ν
μ΄λμ μ€νλ§ λΉμΌλ‘ λ±λ‘λλ€.
μ»΄ν¬λνΈμ μ€μΊ λ²μ
λ©μΈν¨μκ° μν ν¨ν€μ§λ²μκΉμ§λ§μ΄λ€.
(λμ€μ μ€μ μ ν΅ν΄ μ»΄ν¬λνΈ μ€μΊ λ²μλ₯Ό λ°κΏ μ μκΈ΄νλ€.)
μ΄ κ²½μ°λ hello.hellospring λ²μμμλ§ μ€νλ§μ΄ μ»΄ν¬λνΈλ₯Ό μ€μΊκ°λ₯νλ€.
@Controller , @Service , @Repository μ΄λ
Έν
μ΄μ
μ @Component μ΄λ
Έν
μ΄μ
μ νΉμν μΌμ΄μ€μ΄λ€.
μμ : @Controller
@Controller μ½λλ₯Ό 보면 @Component μ΄λ
Έν
μ΄μ
μ΄ λ¬λ €μλ κ²μ νμΈν μ μλ€.
μ€νλ§ μ΄ν리μΌμ΄μ
μ μ€ννλ ν΄λμ€μ μ΄λ
Έν
μ΄μ
μΈ @SpringBootApplication λ΄λΆλ₯Ό μ΄ν΄λ³΄λ©΄, @ComponentScan μ΄λΌλ μ΄λ
Έν
μ΄μ
μ΄ μλ€.
μ¦, μ€νλ§μ΄ μ€νλ λ μ»΄ν¬λνΈ μ€μΊ λ°©μμΌλ‘ μ€νλ§ λΉμ΄ λ±λ‘λλ€.
μ€νλ§μ΄ μ€νλ§ μ»¨ν
μ΄λμ μ€νλ§ λΉμ λ±λ‘ν λ, κΈ°λ³Έμ μ μ±κΈν€μΌλ‘ λ±λ‘νλ€.
μ¦, μ€νλ§ λΉμ κΈ°λ³Έμ μΌλ‘ κ° κ°μ²΄λ§λ€ νλμ©λ§ λ±λ‘κ°λ₯νλ―λ‘ κ°μ μ€νλ§ λΉμ΄λ©΄ κ°μ μΈμ€ν΄μ€μ΄λ€.
μ€μ μ ν΅ν΄ μ±κΈν€μ΄ μλκ² (κ°μ μ€νλ§ λΉμ΄μ¬λ λ€λ₯Έ μΈμ€ν΄μ€λ‘) μ€μ ν μ λ μμ§λ§ κ±°μ μ°μ§λ μλλ€κ³ νλ€.
μλ° μ½λλ‘ μ§μ μ€νλ§ λΉ λ±λ‘νκΈ°
μ΄μ λ°©μμμμ μ΄λ
Έν
μ΄μ
μ μ΄μ©ν μ»΄ν¬λνΈ μ€μΊ λ°©μ λμ μλ°μ½λλ‘ μ§μ μ€νλ§ λΉμ μμ±ν μ μλ€.
SpringConfig.java νμΌμ μμ±νλ€.
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}
Java
볡μ¬
Β @Configuration κ³Ό @Bean μ΄λ
Έν
μ΄μ
μ μ¬μ©νλ€.
Β MemberService μ MemberRepository κ° μ€νλ§ λΉμ λ±λ‘λλ€. ( μ»΄ν¬λνΈ μ€μΊ λ°©μμ μλμΌλ‘ λ°κΎΌ λ²μ μ )
Β MemberService μ MemberRepository κ°μ²΄κ° μ£Όμ
λλ€.
Β Controller κ°μ κ²½μ°μλ μλμΌλ‘ λΉμ μμ±ν΄μ μ£Όμ
μν¬ νμκ° μμΌλ―λ‘ Configure νμΌμμλ λ°λ‘ 건λ릴 νμκ° μλ€. μ΄μ λ°©μμ²λΌ @Controller μ @Autowired λ₯Ό μ¬μ©ν΄μΌ νλ€.
Β μ€νλ§ λΉμ νλλ§ λ±λ‘κ°λ₯(μ±κΈν€ ν¨ν΄)νλ―λ‘ μ§μ μ€νλ§ λΉμΌλ‘ λ±λ‘ν κ°μ²΄λ μ»΄ν¬λνΈ κ΄λ ¨ μ΄λ
Έν
μ΄μ
( ex. @Service, @Repository ) λ₯Ό μμ μ€μΌ νλ€. μ κ·Έλ¬λ©΄ μ€νλ§ λΉμ΄ μ€λ³΅μΌλ‘ μΈμλΌμ μλ¬ λ°μν¨.
MemoryMemberRepository.java
//@Repository // @Bean μΌλ‘ λ±λ‘ν΄μ€¬μΌλ―λ‘ μ΄λ
Έν
μ΄μ
μ κ±°
public class MemoryMemberRepository implements MemberRepository {
private static final Map<Long, Member> store = new HashMap<>();
// μλ΅ ..
Java
볡μ¬
Β MemoryMemberRepository λ SpringConfig μμ @Bean μΌλ‘ μλ λ±λ‘
MemberService.java
//@Service // @Bean μΌλ‘ λ±λ‘ν΄μ€¬μΌλ―λ‘ μ΄λ
Έν
μ΄μ
μ κ±°
public class MemberService {
private final MemberRepository memberRepository;
@Autowired // MemberService κ°μ²΄λ₯Ό μμ±ν λ, memberRepository μμ‘΄μ± μ£Όμ
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
// μλ΅ ..
Java
볡μ¬
Β MemberService λ₯Ό @Bean μΌλ‘ λ±λ‘νμΌλ―λ‘, MemberService μμ±μμμ @Autowired μ¬μ©κ°λ₯
Β MemberRepository λ₯Ό @Bean μΌλ‘ λ±λ‘νμΌλ―λ‘, MemberService μμ±μμμ MemberRepository μ£Όμ
λ°μ μ μμ
Β @Autowired λ₯Ό ν΅ν DI λ μ€νλ§ λΉμΌλ‘ λ±λ‘λ κ°μ²΄(ex. MemberService, MemberController ..) μμλ§ λμνλ€. μμ μλ° κ°μ²΄ (POJO) μμλ λμνμ§ μλλ€.
MemberController.java
@Controller // μ΄λ
Έν
μ΄μ
μ΄ μμΌλ©΄ μ€νλ§ μ»¨ν
μ΄λκ° ν΄λΉ 컨νΈλ‘€λ¬λ₯Ό μμ±ν΄μ κ΄λ¦¬ν΄μ€
public class MemberController {
private final MemberService memberService;
@Autowired // @Autowired μ΄λ
Έν
μ΄μ
μ μν΄ μ€νλ§μ΄ memberService λ₯Ό κ°μ Έμμ μ΄ κ°μ²΄μ μ£Όμ
μμΌμ€
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
Java
볡μ¬
Β Controller κ°μ κ²½μ°μλ μλμΌλ‘ λΉμ μμ±ν΄μ μ£Όμ
μν¬ νμκ° μμΌλ―λ‘ Configure νμΌμμλ λ°λ‘ 건λ릴 νμκ° μλ€. μ΄μ λ°©μμ²λΌ @Controller μ @Autowired λ₯Ό μ¬μ©ν΄μΌ νλ€.
μ§μ Bean μ λ±λ‘ν λμ μ₯μ
Bean μ€μ νμΌλ‘ μ§μ Bean μ λ±λ‘νλ λ°©λ²λ μμλ¬μΌ νλ€.
β’
μ ννλ μ½λ (컨νΈλ‘€λ¬, μλΉμ€, 리ν¬μ§ν 리) : μ»΄ν¬λνΈ μ€μΊμ μ°λ κ²μ΄ λ νΈλ¦¬
β’
μΈν°νμ΄μ€λ₯Ό ꡬνν ν΄λμ€λ₯Ό λ³κ²½ν΄μΌνλ μν© : μ§μ μ€νλ§ λΉμ μ€μ νλ κ²μ΄ λ νΈλ¦¬
ꡬν ν΄λμ€λ₯Ό λ³κ²½ν΄μΌνλ μν©μ μλμ κ°λ€.
SpringConfig.java
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
// return new MemoryMemberRepository();
return new DBMemberRepository();
}
}
Java
볡μ¬
β’
μΈν°νμ΄μ€ : MemberRepository
β’
λ³κ²½ μ ꡬν ν΄λμ€ : MemoryMemberRepository
β’
λ³κ²½ ν ꡬν ν΄λμ€ : DBMemberRepository
λ§μ½ ꡬν ν΄λμ€λ₯Ό μ»΄ν¬λνΈ μ€μΊ λ°©μμΌλ‘ Beanμ λ±λ‘νλ€λ©΄ μ¬λ¬ μ½λλ₯Ό μμ ν΄μΌ ν μ λ μλ€.
νμ§λ§ μ€μ νμΌμμ Bean μ μ§μ μ€μ νλ€λ©΄ λ¨ ν μ€μ΄λ©΄ λλλ€.
Β μ΄λ
Έν
μ΄μ
μ μ΄μ©ν μ»΄ν¬λνΈ μ€μΊλ°©μμ λ§μ΄ μ¬μ©νκΈ°λ νμ§λ§, Bean μ€μ νμΌλ‘ μ§μ Bean μ λ±λ‘νλ λ°©λ²λ μμλ¬μΌ νλ€.