본문 바로가기

SPRING/Spring

[스프링| 스프링 핵심 원리 | 기본편 | 빈 스코프 ] 싱글톤 빈과 함께 사용시 문제점 더보기
[스프링| 스프링 핵심 원리 | 기본편 | 빈 스코프] 프로토 타입 스코프 정리여기서 핵심은 스프링 컨테이너는 프로토타입 빈을 생성하고, 의존관계 주입, 초기화까지만 처리한다는 것이다. 클라이 언트에 빈을 반환하고, 이후 스프링 컨테이너는 생성된 프로토타입 빈을 관리하지 않는다. 프로토타입 빈을 관리할 책임은 프로토타입 빈을 받은 클라이언트에 있다. 그래서 `@PreDestroy` 같은 종료 메서드가 호출되지 않는다. public class SingletonTest { @Test // JUnit 테스트 메소드임을 선언 void singletonBeanFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SingletonBean.class); // 스프링.. 더보기
[스프링| 스프링 핵심 원리 | 기본편 | 빈 생명주기 콜백] 인터페이스 InitializingBean, DisposableBean / 빈 등록 초기화, 소멸 메서드 지정 / @PostConstruct, @PreDestroy public class NetworkClient implements InitializingBean, DisposableBean { // 스프링의 빈 생명주기를 활용하여 초기화 및 소멸 메서드를 정의하는 클래스 private String url; // 네트워크 연결을 위한 URL 저장 변수 public NetworkClient() { // 클래스 생성자 System.out.println("생성자 호출, url = " + url); // 생성자 호출 시 url 초기값(null)을 출력 connect(); // 네트워크 연결 시도 call("초기화 연결 메시지"); // 초기 메시지를 전송 } public void setUrl(String url) {.. 더보기
[스프링| 스프링 핵심 원리 | 기본편 | 빈 생명주기 콜백] 빈 생명주기 콜백 시작 public class NetworkClient { // 네트워크 클라이언트를 위한 클래스 선언 private String url; // 네트워크 연결을 위한 URL 주소를 저장하는 변수 public NetworkClient() { // 클래스의 생성자 System.out.println("생성자 호출, url = " + url); // 생성자 호출 시 URL 상태를 출력 connect(); // 네트워크 연결 메소드 호출 call("초기화 연결 메시지"); // 초기 메시지 전송을 위한 메소드 호출 } public void setUrl(String url) { // URL을 설정하는 메소드 this.url = url; // 인스턴스 .. 더보기
[스프링| 스프링 핵심 원리 | 기본편 | 의존관계 자동 주입] 조회한 빈이 모두 필요할 때 List, Map / 수동 빈 public class AllBeanTest { @Test void findAllBean() { // ApplicationContext를 생성하고, AutoAppConfig와 DiscountService 클래스를 기반으로 Spring 컨테이너를 설정합니다. ApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class); // 컨테이너에서 DiscountService 타입의 빈을 가져옵니다. DiscountService discountService = ac.getBean(DiscountService.class); .. 더보기
[스프링| 스프링 핵심 원리 | 기본편 | 의존관계 자동 주입] 조회 빈이 2개이상 - 문제 @Primary 사용`@Primary` 는 우선순위를 정하는 방법이다. @Autowired 시에 여러 빈이 매칭되면 `@Primary` 가 우선권을 가진다. @Primary, @Qualifier 활용코드에서 자주 사용하는 메인 데이터베이스의 커넥션을 획득하는 스프링 빈이 있고, 코드에서 특별한 기능으로 가끔 사용하는 서브 데이터베이스의 커넥션을 획득하는 스프링 빈이 있다고 생각해보자. 메인 데이터베이스의 커넥션을 획득하 는 스프링 빈은 `@Primary` 를 적용해서 조회하는 곳에서 `@Qualifier` 지정 없이 편리하게 조회하고, 서브 데이터베 이스 커넥션 빈을 획득할 때는 `@Qualifier` 를 지정해서 명시적으로 획득 하는 방식으로 사용하면 코드를 깔끔하게 유지할 수 있다. 물론 이때 메인 .. 더보기
[스프링| 스프링 핵심 원리 | 기본편 | 의존관계 자동 주입] 롬복과 최신 트랜드 @Getter@Getter 애노테이션은 클래스의 필드에 대한 getter 메소드를 자동으로 생성해줍니다. 클래스 레벨이나 필드 레벨에 적용할 수 있으며, 특정 필드에만 적용하고 싶다면 해당 필드에만 애노테이션을 붙일 수 있습니다.import lombok.Getter;@Getterpublic class UserData { private String name; private int age;}public String getName() { return this.name;}public int getAge() { return this.age;}@Setter@Setter 애노테이션은 클래스의 필드에 대한 setter 메소드를 자동으로 생성해줍니다. 이 애노테이션 역시 클래스 전체 또는 특정 필드.. 더보기
[스프링| 스프링 핵심 원리 | 기본편 | 의존관계 자동 주입] 생성자 주입을 선택해라! @Componentpublic class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } @Override public O.. 더보기