일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- http
- Greedy
- 그리디
- java
- JDBC
- transaction
- pointcut
- 백준
- spring
- SpringBoot
- 알고리즘
- 스프링
- AOP
- kotlin
- QueryDSL
- JPQL
- Exception
- 스프링 핵심 원리
- jpa
- 김영한
- 스프링 핵심 기능
- db
- Servlet
- Proxy
- springdatajpa
- Thymeleaf
- Spring Boot
- Android
- 인프런
- 자바
- Today
- Total
목록김영한 (39)
개발자되기 프로젝트
1. 빈 생성, 의존성 주입 후 실행할 method 지정 : @PostConstruct @PostConstruct public void init() { System.out.println("NetworkClient.init"); connect(); call("초기화 연결 메세지"); } 2. 빈 소면 전에 실행할 method 지정 : @PreDestroy @PreDestroy public void close() { System.out.println("NetworkClient.close"); disconnect(); } 3. Test public class BeanLifeCycleTest { @Test public void lifeCycleTest(){ AnnotationConfigApplicationCon..
설정 정보에 초기화, 소멸 메서드 지정이 가능하다. @Bean(initMethod = " ~", destoryMethod = " ~~") 1. @Bean 등록 public class BeanLifeCycleTest { @Test public void lifeCycleTest(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(LifeCycleConfig.class); NetworkClient client = ac.getBean(NetworkClient.class); ac.close(); } @Configuration static class LifeCycleConfig{ @Bean(initMethod = "ini..
1. InitializingBean(초기화) 의존성 주입 완료후 초기화 메서드 제공 afterPropertiesSet() : 의존관계 주입 완료후 실행됨. 2. DisposableBean(소멸) 빈 소멸되기 직전 실행하는 메서드 제공 destroy() 3. Test public class NetworkClient implements InitializingBean, DisposableBean { private String url; public NetworkClient(){ System.out.println("생성자 호출, url =" + url); } public void setUrl(String url) { this.url = url; } //서비스 시작시 호출 public void connect(){ ..
자동 등록을 선호 @Component면 끝남 자동 빈 등록은 사용해도 OCP, DIP 지킬 수 있다. - annotation 수정은 필요 할 수 도 ㅎ 언제 수동으로 등록하는게 좋음? 애플리케이션은 크게 두 종류로 나눌 수 있음. 업무 로직 빈 : cotroller, service, repository 모두 업무로직, 보통 비즈니스 요구사항 개발시 추가, 변경됨. - 업무 로직은 숫자도 많고...controller, service, repository처럼 패턴이 있음. - 이럴 경우 자동 기능을 적극 사용하자. - 문제 발생하면 명확하게 파악 가능. 기술 지원 빈 : 기술적인 문제, AOP 처리할때 사용. db연결, 공통 로그 처리..등등 - 수자 적고, 애플리케이션에 광범위하게 영향 미침. - 문제가 ..
가끔 해당 타입의 스프링 빈이 다~ 필요한 상황이 있다. 1. AllBeanTest @Autowired 통해 DiscountPolicy 타입에 해당하는 스프링 빈을 받고, 출력하는 service를 작성 설정 클래스는 AutoAppConfig와 DiscountService를 등록 어? DiscountService를,, 설정파일..로..? --> Component class로 등록임 Component scan에 의해 DiscountService도 스프링 빈으로 등록됨 Create a new AnnotationConfigApplicationContext, deriving bean definitions from the given component classes and automatically refreshing..
흠 근데 @Qualifier를 그냥 사용하면 문제가 있음 @Qualifier("mainDiscountPolicy")라고 지정했다 해보자. 타입 체크 어떻게함?????????? annotaion을 만들어서 해결할 수 있음. 1. annotaion 생성 우리가 만든 annotaion에 @Qualifier를 적용해 주자. 즉, 우리가 만든 annotaion을 사용하면 @Qualifier가 매칭이 된다. @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documen..
@Autowired는 타입으로 조회를 한다. 근데 스프링 컨테이너에 같은 타입의 빈이 여러 개 있으면..? 1. 같은 타입이 2개! DiscountPolicy의 구현체는 2개가 있다. RateDiscountPolicy @Component public class RateDiscountPolicy implements DiscountPolicy{ FixDiscountPolicy @Component public class FixDiscountPolicy implements DiscountPolicy{ 둘 다 @Component등록이 되면 어떻게 될까? 2. Test public class AutoAppConfigTest { @Test void basicScan(){ AnnotationConfigApplica..
최근에는 대부분 생성자 주입을 권장해! 여러가지 이유가 있다. 1. 불변 대부분의 의존관계 주입은 변경할 일이 없다. 오히려 대부분의 의존관계는 애플리케이션 종료 전 까지 변하면 안된다! 수정자 주입을 사용하면, setXXX를 public으로 열어둬야함. 누군가 변경할 수 도 있고,,, 변경하면 안되는 것을 열어두는 것 은 좋지않아.. 생성자 주입을 객체 생성할 때 딱! 1번만 호출됨! 이후에 호출될 일 없음!!! 따라서 불변하게 설계가 쌉가능 2. 누락 프레임 워크 없이 순수한 자바 코드를 단위 테스트 하는 경우에.... 코드만 보면 의존관계를 확인하기 어렵다. Setter 주입을 사용하면.. 코드를 직접 안까지 까보거나, 컴파일을 해야 확인이 가능하다. 하지만 생성자 주입을 사용하면 의존관계를 주입 ..