일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- html
- vscode
- Web
- jsp
- 単語
- 인프런
- springboot
- 日本語
- メソッド
- 디지몬
- 一日一つメソッド
- nico
- 연습문제
- 반다이몰
- C로 시작하는 컴퓨터 프로그래밍4판
- Spring
- CSS
- 자바
- 건담베이스
- 건담
- 비즈니스일본어
- rails7
- 일본어
- DART
- Python
- javascript
- Flutter
- java
- rails
- ruby
Archives
- Today
- Total
AR삽질러
Spring-기본예제-> Spring(6) 본문
728x90
이전코드에서 AppConfig클래스에서 직접 의존성을 주입하는 방법을 사용하고 MemberApp class, OrderApp class를 직접 생성하여 의존성을 주입하였다. 이전 코드의 단점은 객체의 생성과 의존성 주입을 개발자가 직접 해야하므로 코드가 복잡하고 유지보수가 어려울것이다.
이후 변경된 코드는 AppConfig class에서 @Configuration 어노테이션을 추가해 스프링 설정파일로 지정하였고 @Bean 어노테이션을 사용하여 스프링 컨테이너에 빈 객체를 등록하였다. ApplicationContext를 사용하여 스프링 컨테이너를 생성하고 필요한 Bean을 가져와 사용할 수 있게되었다.
1. Spring Bean
- 스프링빈은 스프링 컨테이너에서 생성되고 관리되는 객체로 일반적으로 핵심로직, 데이터접근객체 등을 포함한다.
2. Spring Container
- 스프링 컨테이너는 스프링 빈을 생성 및 관리하는 컨테이너로 객체의 생명주기관리와 의존성 주입을 한다.
- 스프링 컨테이너에서 스프링 빈의 설정 정보를 보존하고 의존성을 주입할 수 있다.
AppConfig
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MemberService memberService() {
return new MemberServiceImpl(memberRepository());
}
@Bean
public MemoryMemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService() {
return new OrderServiceImpl(memberRepository(), discountPolicy());
}
@Bean
public DiscountPolicy discountPolicy(){
//return new FixDiscountPolicy();
return new RateDiscountPolicy();
}
}
MemberApp
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import org.springframework.context.ApplicationContext;
public class MemberApp {
public static void main(String[] args) {
//AppConfig appConfig = new AppConfig();
//MemberService memberService = appConfig.memberService();
// MemberService memberService = new MemberServiceImpl();
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("find Member = " + findMember.getName());
}
}
OrderApp
public class OrderApp {
public static void main(String[] args) {
// AppConfig appConfig = new AppConfig();
// MemberService memberService = appConfig.memberService();
// OrderService orderService = appConfig.orderService();
// MemberService memberService = new MemberServiceImpl(null);
// OrderService orderService = new OrderServiceImpl(null, null);
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class);
MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
OrderService orderService = applicationContext.getBean("orderService", OrderService.class);
// MemberService memberService = applicationContext.getBean("memberService", MemberService.class);
Long memberId = 1L;
Member member = new Member(memberId, "memberA", Grade.VIP);
memberService.join(member);
Order order = orderService.createOrder(memberId, "itemA", 20000);
System.out.println("order = " + order);
System.out.println("order = " + order.calculatePrice());
}
}
728x90
반응형
LIST
'JAVA > Spring' 카테고리의 다른 글
Spring springBeen조회(8) (0) | 2023.07.16 |
---|---|
Spring springBeen과 springContainer(7) (0) | 2023.07.15 |
Spring-등급제회원_기본예제DIP, OCP(5) (0) | 2023.06.28 |
Spring-등급제회원_기본예제(4) (0) | 2023.06.27 |
Spring-등급제회원_기본예제(3) (0) | 2023.06.27 |