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 |