public class SingletonService {
private static final SingletonService instance = new SingletonService(); //하나 생성
public static SingletonService getInstance() { //여기서만 객체 호출
return instance;
}
private SingletonService() { //생성자를 private으로 -> new로 객체 생성하는 것을 막음
}
싱글톤 객체는 무상태를 유지!!!
특정 필드에 의존적인 필드, 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안 됨!!
스프링 컨테이너는 파라미터로 들어온 설정 클래스(AppConfig.class)를 통해 스프링 빈을 등록
@Bean //spring 컨테이너에 등록
public MemberService memberService(){
return new MemberServiceImpl(memberRepository()); //1번
}
@Bean
public MemberRepository memberRepository() {
return new MemoryMemberRepository();
}
@Bean
public OrderService orderService(){
return new OrderServiceImpl(new MemoryMemberRepository(), discountPolicy());
} //2번