DI(의존성 주입):빈으로 등록된 객체들은 스프링 컨테이너에 의해 관리되며, 필요한 의존성은 자동으로 주입된다. 코드의 유지 보수성이 향상되고 유연성이 증가한다.
AOP(Aspect-Oriented Programming) 지원: 스프링은 AOP를 지원하여 관심사(Concern)를 분리할 수 있게 합니다.
테스트 용이성
스프링 빈을 등록하는 2가지 방법
- 컴포넌트 스캔과 자동 의존관계 설정
- 자바 코드로 직접 스프링 빈 등록하기
각각의 @Controller / @Service / @Repository 를 해당하는 Controller / Service / Repository에 입력해주면 된다.
예)
@Controller
public class MemberController {
private final MemberService memberService;
@Autowired
public MemberController(MemberService memberService) {
this.memberService = memberService;
}
}
@Service
public class MemberService {
private final MemberRepository memberRepository;
public MemberService(MemberRepository memberRepository) {
this.memberRepository = memberRepository;
}
}
@Repository
public class MemoryMemberRepository implements MemberRepository{}
MemberService / MemberRepository의 @Service, @Repository 애노테이션을 제거하고 진행한다.
예)
@Configuration
public class SpringConfig {
@Bean
public MemberService memberService() {
return new MemberService(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
}