프레임워크 vs 라이브러리
- 프레임워크 : 내가 작성한 코드를 제어하고 대신 실행해주면 프레임워크에 해당 (ex : JUnit)
- 라이브러리 : 내가 작성한 코드가 직접 제어의 흐름을 담당한다면 라이브러리에 해당 (ex : Java 객체 -> Json으로 바꾸는 라이브러리)
스프링으로 관리되는 예제 코드
@Configuration // 설정정보 (ex : 이게 설정파일임을 알리며, Bean을 등록한다는것을 의미함)
public class AppConfig {
@Bean
public MemberService memberService(){
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService(){ return new OrderServiceImpl(memberRepository(), discountPolicy());}
@Bean
public DiscountPolicy discountPolicy(){
return new FixDiscountPolicy();
}
}
* @Configuration : 설정정보 (ex : 해당 파일이 설정 파일임을 알리며, Bean을 등록한다는 것을 의미)
public class MemberApp {
public static void main(String[] args) {
/*
(구코드) appConfig 객체를 직접 생성해서 memberService를 가져왔다.
AppConfig appConfig = new AppConfig();
MemberService memberService = appConfig.memberService();*/
// applicationContext가 @Bean을 모두 관리함
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
Member member = new Member(1L,"memberA", Grade.VIP);
memberService.join(member);
Member findMember = memberService.findMember(1L);
System.out.println("New Member = " + member.getName());
System.out.println("findMember = " + findMember.getName());
}
}
public class OrderApp {
public static void main(String[] args) {
/*
(구코드) appConfig객체를 직접 생성해서 Member,OrderService를 각각 가져왔다.
AppConfig appConfig = new AppConfig();
MemberService memberService = appConfig.memberService();
OrderService orderService = appConfig.orderService();*/
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
OrderService orderService = applicationContext.getBean("orderService", OrderService.class);
Long memberId = 1L;
Member member = new Member(memberId, "memberA", Grade.VIP);
memberService.join(member);
Order order = orderService.createOrder(memberId, "itemA", 10000);
System.out.println("order = " + order);
}
}
* ApplicationContext : 모든 @Bean을 관리하는 일종의 Spring Container
'👩🏻💻 Programming > SpringBoot' 카테고리의 다른 글
@JsonUnwrapped의 개념과 사용법 (0) | 2022.03.07 |
---|---|
@SpringBootTest, @AutoConfogureMockMvc, 그리고 @WebMvcTest (0) | 2022.02.10 |
SpringBoot에서 Naver API 연동하기 (2) | 2021.12.08 |
Spring Boot와 Exception 처리 (0) | 2021.12.07 |
DNS 매핑 및 웹 서버 연동 (0) | 2021.11.07 |