일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- OS
- 컴퓨터공학
- Public
- 신입
- 이펙티브 자바
- 스프링
- 개발
- 프로그래밍
- 우리카드
- Effective Java
- spring
- 신입사원
- 공채
- 운영체제
- github
- 스터디
- 세마포어
- 뮤텍스
- 깃허브
- IT
- 알고리즘
- CS
- 정보처리기사
- 깃
- 디지털
- package-private
- 메모리
- 컴퓨터과학
- 자바
- java
- Today
- Total
목록Spring/핵심 (16)
주니어 개발자 성장기
빈 생명주기 콜백 시작 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결을 미리 해두고, 애플리케이션 종료 시점에 연결을 모두 종료하는 작업을 진행하려면 객체의 초기화와 종료 작업이 필요하다. 스프링 빈은 간단하게 다음과 같은 라이프사이클을 가진다. 객체 생성 -> 의존관계 주입 스프링 빈은 객체를 생성하고, 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료된다. 따라서 초기화 작업은 의존관계 주입이 모두 완료되고 난 다음에 호출해야 한다. 그런데 개발자가 의존관계 주입이 모두 완료된 시점을 어떻게 알 수 있을까? 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 스프링..
애노테이션 직접 만들기 @Qualifier("mainDiscountPolicy") 이렇게 문자를 적으면 컴파일 시 타입 체크가 안된다. 다음과 같은 애노테이션을 만들어서 문제를 해결할 수 있다. @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented @Qualifier("mainDiscountPolicy") public @interface MainDiscountPolicy { } @Qualifier를 적용할 클래스에 적용 @Component @MainDiscount..
롬복과 최신 트랜드 막상 개발을 해보면, 대부분이 다 불변이고, 그래서 다음과 같이 필드에 final 키워드를 사용하게 된다. (final 키워드를 달면 생성자 호출 이후에는 변경이 불가능하다. - 상수) 하지만 생성자를 작성하는 것은 번거롭기 때문에 다음과 같은 방법을 쓴다. 생성자에 @Autowired 생략 생성자가 1개라면 생략 가능하다. 롬복의 @RequiredArgsConstructor 기능을 사용하면 final이 붙은 필드를 모아서 생성자를 자동으로 만들어준다. 위의 두 방법을 동시에 사용하면 깔끔한 코딩이 가능하다. 조회 빈이 2개 이상 - 문제 @Autowired는 타입(Type)으로 조회한다. 따라서 같은 타입의 Bean이 두 개가 있으면 오류(NoUniqueBeanDefinitionEx..
다양한 의존관계 주입 방법 의존관계 주입은 크게 4가지 방법이 있다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 이름 그대로 생성자를 통해서 의존 관계를 주입 받는 방법이다. 특징 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용 *중요! 생성자가 1개 있으면 @Autowired를 생략해도 된다! * 물론 스프링 빈에만 해당한다. 생성자 주입은 스프링 빈 등록단계에서 의존 관계 주입이 함께 이루어 진다. 수정자 주입(setter 주입) setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해서 의존관계를 주입하는 방법이다. 특징 선택,변경 가능성이 있는 의존관계에 사용 자바빈 프로퍼티 규약의 수정자 메서드 방식을 사용하는 ..
탐색 위치와 기본 스캔 대상 탐색할 패키지의 시작 위치 지정 모든 자바 클래스를 다 컴포넌트 스캔하면 시간이 오래 걸린다. 그래서 꼭 필요한 위치부터 탐색하도록 시작 위치를 지정할 수 있다. @ComponentScan( basePackages = "hello.core" ) basePackages: 탐색할 패키지의 시작 위치를 지정한다. 이 패키지를 포함해서 하위 패키지를 모두 탐색한다. 여러 개의 시작위치를 지정할 수도 있다. 만약 지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지가 시작 위치가 된다. 권장하는 방법 패키지 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 최상단에 두는 것이다. 최근 스프링 부트도 이 방법을 기본으로 제공한다. 참고로 스프링 부트를 사..
컴포넌트 스캔과 의존관계 자동 주입 지금까지 스프링 빈을 등록할 때는 자바 코드의 @Bean이나 XML의 등을 통해서 설정 정보에 직접 등록할 스프링 빈을 나열했다. 실무에서는 스프링 빈이 수십, 수백개가 되기 때문에 일일이 등록하기가 어렵다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 또한 의존관계도 자동으로 주입하는 @Autowired 라는 기능도 제공한다. AutoAppConfig.java @Configuration // AppConfig.java도 Component이기 때문에 필터링을 통해 자동등록에서 제외시킨다. @ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterT..