Spring(89)
-
[Spring] 빈 생명주기 콜백에 대한 나름의 이해
빈이 초기화되거나 종료될 때 특정한 목적에 따라 콜백함수를 부르는 것을 의미한다. 이를 구현하는 방법에는 크게 세 가지가 있고 각각의 방법에서 배울 점이 있다. 빈의 생명주기 콜백함수를 부를 수 있는 경우는 두가지이다. 1. 의존관계가 주입이 완료된 직후. 2. 빈이 소멸되기 직전. 생성자 주입을 제외하고는 빈이 생성 -> 의존관계 주입된다. 객체의 의존관계 주입과 객체의 초기화는 다른 개념이다. 차이는 '대상'이다. 의존관계 주입은 클래스 내부에서 사용하고 있는 다른 객체를 외부에서 넣어주는 것이다. 객체의 초기화는 객체가 가지고 있는 속성값을 넣어주는 것이다. 속성값을 초기화해주는 것은 setter로 한다. 왜냐하면 객체를 생성하는 역할과 초기화해서 사용 가능하도록 만드는 역할은 다르기 때문이다. 따..
2023.10.22 -
[Spring] 빈 자동등록에 대한 나름의 이해
빈 자동등록, 수동등록 언제 사용해야할까? 비즈니스 로직의 경우 그 구성이 대체적으로 동일하기 때문에 디폴트를 자동등록으로 두는게 좋다. 다만 같은 타입의 빈을 여러개 등록하는 경우 즉 다형성을 적극 활용하는 경우에는 수동등록도 고민해볼 필요가 있다. 왜냐하면 자동등록을 하면 어떤 빈이 등록되는지 명확히 알 수 있는 방법이 없고 일일이 확인을 해가며 찾아야 하기 때문이다. 다형성을 활용하는데 자동으로 하고자 할때는 하나의 패키지 안에 두어 명확하게 나타내는것이 좋다. 수동등록은 기술지원로직에서 활용하는게 좋다. 왜냐하면 기술지원로직은 한곳에만 영향을 주는 것이 아니라 프로젝트 전체에 영향을 주기 때문이다. 이런 경우 configuration 파일을 두는 것과 같이 수동으로 빈을 등록하게 되면 이러한 빈의..
2023.10.21 -
[Spring] 조회한 빈이 모두 필요할 때에 대한 나름의 이해
HashMap과 List를 이용하면 그 타입 빈을 생성자 주입을 통해서 모두 받을 수 있다. 동적으로 빈을 선택해줄 때 되게 유용한 방법이다. Code 값으로 파라미터에 대한 인자를 받고 받은 값을 키로 hashmap에 넣어주게 되면 해당하는 빈(객체)을 얻을 수 있는 것이다. Map, List 처럼 사용한다. ChatGPT에 따르면 보통은 HashMap이나 LinkedHashMap을 사용한다고 한다. 그리고 AnnotationConfigApplicationContext 등록해줄 때 두 개 이상의 인자도 가능하다. 이때 concat개념으로 가져온다. 그리고 config파일이 아닌 class 파일도 넣을 수 있다. 그러면 거기에 대한 빈을 만들고 의존관계를 주입해준다. 물론 하나의 class만 넣으면 빈이..
2023.10.18 -
[Spring] 애노테이션 직접 만들기
다음과 같은 상황을 해결하기 위해 애노테이션을 직접 만들어보자 @Qualifier를 쓰게 되면 내가 안에 들어가는 문자가 main인데 mainn으로 잘못 입력할 수도 있다. 근데 이러면 컴파일 오류가 나지 않기 때문에 어디가 틀렸는지 확인하는데 애를 먹을 수 있다. 이러한 경우 mainn으로 입력하면 바로 오류가 뜨도록 애노테이션을 만들 수 있다.@Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented @Qualifier("mainDiscountP..
2023.10.17 -
[Spring] 조회 빈이 두 개 이상일 때 해결편
크게 세가지 방법이 있다. 첫 번째는 필드나 파라미터의 이름을 원하는 빈의 이름으로 바꿔주면 @Autowired는 매칭을 해준다. 예를 들어, rateDiscountPolicy라고 파라미터를 정해주면 이름이 rateDiscountPolicy인 빈을 선택한다. 두 번째는 @Qualifier(name)을 붙여주고 파라미터 왼쪽에 지정하고자 하는 @Qualifier(name)을 붙여준다. 세 번째는 @Primary를 활용한다. @Primary를 붙여주면 이것이 붙지 않은 빈보다 우선순위가 높아진다. 실무에서 주로 활용하는 방법은 메인 데이터베이스에는 @Primary를 붙여주고 서브에는 @Qualifier를 붙여준다. 그리고 필요할 때면 @Qualifier로 주입한다. @Qualifier로 지정한 것이 @Pri..
2023.10.14 -
[Spring] 조회 빈이 두 개 이상일 때 생기는 문제에 대한 나름의 이해
의존관계 자동 주입을 할 때 만약 같은 타입의 빈이 두 개 이상이라면 어떻게 될까? NoUniqueBeanDefinitionException이 발생하게 된다. 상당히 실무에서 자주 발생하는 에러이다. 그렇다고 하위 타입으로 하기에는 DIP를 위반하고 이것도 두 개 이상이라면 역시나 문제가 된다. 이를 해결하기 위해서는 어떻게 해야할까? Reference https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8&unitId=55377 학습 페이지 www.inflearn.com
2023.10.12