kok202
스프링 기타 지식

2020. 2. 15. 02:41[개발] 기록/기록

@Qualifier

@Bean 를 사용할 때 쓰는 @Qualifier 는 빈의 이름을 지정하는 동작이며, @Autowired 를 사용할 때 쓰는 @Qualifier 는 주입받으려는 객체의 타입이 애매모호할 때 특정 객체를 지정하는 동작이다.

 

@Autowired 필수 여부

의존 주입을 반드시 받을 필요가 없는 경우 다음과 같은 3개의 선택지가 있다.

1. @Autowired(required=true)

2. @Autowired 객체 타입이 Optional 인경우 ex. Optional<MyComponent> 

3. setter 주입 매소드의 매개변수에 @Nullable 을 같이 명시할 경우

 

빈의 초기화 과정

1. 기본 생성자 호출

2. setter 호출

...
    @Bean
    @Qualifier("yourComponentA")
    public YourComponent yourComponentA(){
        return new YourComponent("A");
    }
    
    @Bean
    @Qualifier("yourComponentB")
    public YourComponent yourComponentB(){
        return new YourComponent("B");
    }
    
    @Bean
    public MyComponent myComponent(){
        MyComponent myComponent = new MyComponent();
        myComponent.setYourComponent(YourComponentA());
        return myComponent;
    }
...

---

@Component
public class MyComponent{
    private YourComponent yourComponent;
    
    @Autowired
    @Qualifier("yourComponentB")
    public setYourComponent(YourComponent yourComponent){
        this.yourComponent = yourComponent;
    }
}

myComponent 안에 들어가있는 yourComponent 는 setter 를 이용해 지정해줬을 지라도 yourComponentB가 들어가 있다/

 

빈의 라이프 사이클

빈의 라이프 사이클에 맞춰 특정 메소드를 호출 할 수 있다.

방법 1. InitializingBean 혹은 DisposableBean 인터페이스를 구현한다.

방법 2. @Bean(initMethod="myInitFunction", destroyMethod="myDestroyFucntion") 을 사용한다.

위 방법을 사용한 대표적인 케이스가 데이터베이스 커넥션 풀 관리, 서버와의 커넥션 관리와 같은 동작이다.

 

프록시와 데코레이터

두 패턴 모두 어떤 요청에 대해 다른 객체로 실행을 위임하는 패턴이다. 단 두 패턴이 집중하는 내용이 조금 다르다.

프록시 : 접근 제어에 초점

데코레이터 : 기능 추가, 확장에 초점

 

HttpServletRequest

컨트롤러 안의 핸들러에서 사용할 수 있는 Http 서블릿 요청 그 자체.

 

커맨더 객체

컨트롤러 안의 핸들러에 들어가는 매개변수 객체

 

Validator 인터페이스

스프링 프레임워크에서 있는 기본 클래스. 커맨더 객체의 값이 올바른지 검사할 때 사용할 수 있다. 자동 동작은 아니고 객체를 생성하고 valid 메소드를 호출해줘야한다. ValidationUtils 클래스와 같이 사용하기 좋다.

 

글로벌 Validator

Validator 를 Bean 으로 등록하고 원하는 곳의 핸들러 매개변수에 @Valid 어노테이션을 달아주면 해당 타입을 검증하는 로직이 자동으로 돌게할 수 있다.

 

컨트롤러 단위의 Validator

Validator 를 글로벌 단위로 쓰는 것이 부담스럽다면 @InitBinder를 사용해 컨트롤러 단위로 Validator 를 등록할 수 있다.


@CookieValue

쿠키 값을 얻어오는 어노테이션

 

@Profile

Profile 어노테이션에 멀티 프로필을 등록해줄 수 있다.

@Profile("local,development")

특정 프로필을 선택하려면 환경 변수 세팅을 해줘야 하는데 어플리케이션 단에서도 처리가 가능하다.

context.getEnvironment().setActiveProfiles("development");

 

메이븐 라이프 사이클

compile -> test -> package -> install -> deploy

install : 로컬 리포지토리에 배포

deploy : 원격 리포지토리에 배포

 

메이븐 의존 scope

compile : 컴파일시 필요. 컴파일 ~ 테스트 ~ 런타임에 클래스 패스에서도 포함. 기본값.

runtime : 런타임시 필요. 컴파일 할 때는 필요 x.

provided 컴파일 할 때 필요하지만 컨테이너 등에서 기본 제공 되는 모듈이다.

test : 테스트 코드 컴파일시 필요.

 

플러그인 골

메이븐 플러그인 실행시 커맨드

// 플러그인 이름: 플러그인 지원 골
compiler:compile

 

* @RestController 가 들어오기 전까지는 Json 응답을 위해 @Controller 와 @ResponseBody 를 같이 사용하였다.

 

 

 

'[개발] 기록 > 기록' 카테고리의 다른 글

테코톡 정리  (0) 2020.10.13
사설 SSL 인증서 만들기  (0) 2020.03.11
파이어스토어 + 리액트  (0) 2020.02.09
자바스크립트 기초  (0) 2020.02.09
메이븐 빌드시 프록시 문제 : jvm.config  (0) 2019.06.28