일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- QueryDSL
- Exception
- 백준
- 자바
- JDBC
- java
- 그리디
- Servlet
- db
- 김영한
- Android
- Thymeleaf
- 알고리즘
- http
- pointcut
- spring
- 인프런
- Spring Boot
- JPQL
- jpa
- AOP
- 스프링 핵심 기능
- 스프링
- 스프링 핵심 원리
- springdatajpa
- transaction
- Proxy
- SpringBoot
- kotlin
- Greedy
- Today
- Total
목록인프런 (43)
개발자되기 프로젝트
가끔 해당 타입의 스프링 빈이 다~ 필요한 상황이 있다. 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 주입을 사용하면.. 코드를 직접 안까지 까보거나, 컴파일을 해야 확인이 가능하다. 하지만 생성자 주입을 사용하면 의존관계를 주입 ..
1. 의존관계 주입 방법 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 2. 생성자 주입. ???? : @Autowired가 있네? 컨테이너에서 같은 타입의 빈 꺼내옴. 집어넣음 특징 - 생성자 호출 시점에 딲 1번 만 호출되는 것이 보장됨. - 불변, 필수 의존관계에 사용--> set을 public으로 열어두면 안됨 (getter, setter 막만들면 안됨!) @Component public class OrderServiceImpl implements OrderService{ private final MemberRepository memberRepository; //private final DiscountPolicy discountPolicy = new RateDiscoun..
컴포넌트 스캔을 통해 같은 빈 이름을 등록하면????? 자동 빈 등록 vs 자동 빈 등록 수동 빈 등록 vs 자동 빈 등록 1. 자동 빈 등록 vs 자동 빈 등록 컴포넌트 스캔을 통해 이미 등록되었는데, 또! 등록되면??? ConflictingBeanDefinitionException 발생 스프링 빈 설정 메타정보 - BeanDefinition XML로 설정해보자아 1. Xml사용 스프링 부트 사용하면서 잘 사용안함... 레거시 프로젝트들이 xml로 되어있음. xml을 사용하면 컴파일 없이 빈 설정 정볼르 변경할 수 있다는 장점도 있음!! GenericXmlApp bsh-developer.tistory.com 2. 수동 빈 등록 vs 자동 빈 등록 현재 MemoryMemberRepository가 @Com..
includeFilters : 스캔 대상 추가 includeFilters = @ComponentScan.Filter(type = , classes = ) excludeFilters : 스캔 대상에서 제외 excludeFilters = @ComponentScan.Filter(type = , classes = ) 1. MyIncludeComponent Annotation 해당 annotaion이 붙은 클래스는 컴포넌트 스캔에 포함 @Target(ElementType.TYPE) //TYPE : class레벨에 붙음 @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyIncludeComponent { //얘가 붙은건 Component 스캔에 ..
1. 탐색할 패키지 시작위치 지정(basePackages) 모든 클래스를 다~~ 뒤지면 오래걸린다. 꼭 필요한 위치부터 탐색하도록 하자. 그냥 냅두면 라이브러리까지 다뒤짐.... @ComponentScan( basePackages = "~~~" ) 해당 패키지를 포함해서 하위 패키지를 전부 탐색 {"~~", "~~~~"} 여러 패키지를 탐색 시작 위치로 지정 가능 @Configuration @ComponentScan( //스캔에서 제외할 것 -->@ComponentScan도 @Component임, AppConfig나 TestConfig제외하기 위해. excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configur..