π[Spring] μλ° μ½λλ‘ μ§μ μ€νλ§ λΉ λ±λ‘νκΈ°.
- μ€νλ§μμ μλ° μ½λλ‘ μ€νλ§ λΉμ μ§μ λ±λ‘νλ λ°©λ²μ μ£Όλ‘
@Configuration
μ λ Έν μ΄μ κ³Ό@Bean
μ λ Έν μ΄μ μ μ¬μ©νμ¬ μ΄λ£¨μ΄ μ§λλ€.- μ΄ λ°©μμ XML μ€μ νμΌ λμ μλ° ν΄λμ€λ₯Ό μ¬μ©νμ¬ μ€νλ§ λΉμ μ μνκ³ κ΄λ¦¬νλ λ°©λ²μ λλ€.
1οΈβ£ @Configuration
κ³Ό @Bean
μ μ¬μ©ν λΉ λ±λ‘
-
@Configuration
- μ΄ μ λ
Έν
μ΄μ
μ ν΄λΉ ν΄λμ€κ° νλ μ΄μμ
@Bean
λ©μλλ₯Ό ν¬ν¨νκ³ μμΌλ©°, μ€νλ§ μ»¨ν μ΄λμμ λΉ μ μλ₯Ό μμ±νκ³ μ²λ¦¬ν μ μλ μ€μ ν΄λμ€μμ λνλ λλ€.
- μ΄ μ λ
Έν
μ΄μ
μ ν΄λΉ ν΄λμ€κ° νλ μ΄μμ
-
@Bean
- μ΄ μ λ Έν μ΄μ μ λ©μλ λ 벨μμ μ¬μ©λλ©°, λ©μλμ 리ν΄κ°μ΄ μ€νλ§ μ»¨ν μ΄λμ μν΄ κ΄λ¦¬λλ λΉ(Bean)μ΄ λ¨μ λνλ λλ€.
2οΈβ£ μμ.
μλλ MemoryMemberRepository
ν΄λμ€λ₯Ό μλ° μ½λλ‘ μ€νλ§ λΉμΌλ‘ λ±λ‘νλ λ°©λ²μ 보μ¬μ£Όλ μμμ
λλ€.
-
1. λΉμΌλ‘ λ±λ‘ν ν΄λμ€ μ μ
```java
package com.devkobe.hello_spring.repository;
import com.devkobe.hello_spring.domain.Member;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
public class MemoryMemberRepository implements MemberRepository {
private static Map<Long, Member> store = new HashMap<>();
private static long sequence = 0L;
@Override
public Member save(Member member) {
member.setId(++sequence);
store.put(member.getId(), member);
return member;
}
@Override
public Optional<Member> findById(Long id) {
return Optional.ofNullable(store.get(id));
}
@Override
public Optional<Member> findByName(String name) {
return store.values().stream()
.filter(member -> member.getName().equals(name))
.findAny();
}
@Override
public List<Member> findAll() {
return new ArrayList<>(store.values());
}
public void clearStore() {
store.clear();
} } ```
-
2. μλ° μ€μ νμΌμμ λΉ λ±λ‘
```java
package com.devkobe.hello_spring.config;
import com.devkobe.hello_spring.repository.MemberRepository;
import com.devkobe.hello_spring.repository.MemoryMemberRepository;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
} } ```
-
3. μ€νλ§ μ»¨ν
μ΄λμμ λΉ μ¬μ©
```java
package com.devkobe.hello_spring.service;
import com.devkobe.hello_spring.repository.MemberRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class MemberService {
private final MemberRepository memberRepository;
@Autowired
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
// λΉμ¦λμ€ λ‘μ§ λ©μλλ€... } ```
3οΈβ£ μ€λͺ .
-
AppConfig
ν΄λμ€-
@Configuration
μ λ Έν μ΄μ μ μ¬μ©νμ¬ μ΄ ν΄λμ€κ° μ€νλ§ μ€μ ν΄λμ€λ‘ μ¬μ©λ κ²μμ λͺ μν©λλ€. -
memberRepository()
λ©μλλ@Bean
μ λ Έν μ΄μ μΌλ‘ μ μλμ΄ μμΌλ©°, μ΄ λ©μλμ 리ν΄κ°μ΄ μ€νλ§ μ»¨ν μ΄λμ μν΄ κ΄λ¦¬λλ λΉμ΄ λ©λλ€.- μ΄ κ²½μ°,
MemoryMemberRepository
κ°μ²΄κ° λΉμΌλ‘ λ±λ‘λ©λλ€.
- μ΄ κ²½μ°,
-
-
λΉ μ¬μ©
-
MemberService
ν΄λμ€μμMemberRepository
νμ μ λΉμ΄ μμ±μ μ£Όμ λ°©μμΌλ‘ μ£Όμ λ©λλ€.- μ΄λ,
AppConfig
ν΄λμ€μμ λ±λ‘λMemoryMemberRepository
λΉμ΄ μ£Όμ λ©λλ€.
- μ΄λ,
-
4οΈβ£ μ μλ° μ€μ μ μ¬μ©ν κΉ?
-
1. νμ
μμ μ±
- μλ° μ½λλ μ»΄νμΌ μμ μ νμ μ 체ν¬ν μ μμΌλ―λ‘, XMLλ³΄λ€ νμ μμ μ±μ΄ λμ΅λλ€.
-
2. IDE μ§μ
- μλ° κΈ°λ° μ€μ μ IDEμ μλ μμ± κΈ°λ₯κ³Ό 리ν©ν λ§ λꡬλ₯Ό μ μ§μλ°μ μ μμ΅λλ€.
-
3. μ½λ μ¬μ¬μ©μ±
- μλ° μ€μ ν΄λμ€λ μΌλ° μλ° μ½λμ²λΌ μ¬μ¬μ© μ¬λ₯νλ©°, μμκ³Ό μ‘°ν© λ±μ νμ©ν μ μμ΅λλ€.
5οΈβ£ κ²°λ‘
- μ€νλ§μμ μλ° μ½λλ‘ λΉμ λ±λ‘νλ λ°©λ²μ
@Configuration
κ³Ό@Bean
μ λ Έν μ΄μ μ μ¬μ©ν λ°©λ²μ λλ€.- μ΄ λ°©μμ XML κΈ°λ° μ€μ λ³΄λ€ λ νμ μμ νκ³ , μ μ§λ³΄μνκΈ° μ¬μ°λ©°, νλμ μΈ μ€νλ§ μ ν리μΌμ΄μ μμ μμ£Ό μ¬μ©λ©λλ€.