일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Android
- Proxy
- 김영한
- 스프링 핵심 원리
- QueryDSL
- pointcut
- 자바
- 스프링
- Spring Boot
- springdatajpa
- spring
- 인프런
- kotlin
- java
- AOP
- JPQL
- 그리디
- 백준
- transaction
- 알고리즘
- 스프링 핵심 기능
- Greedy
- Servlet
- Thymeleaf
- JDBC
- http
- db
- SpringBoot
- Exception
- jpa
- Today
- Total
목록java (156)
개발자되기 프로젝트
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..
이 전 까지는 스프링 빈을 등록하기 위해서 @Bean을 사용하여 직접 나열했다. 근데 너무 귀찮지 않음????? 스프링에서는 자동으로 등록하는 Component 스캔기능을 제공함 또한 의존관계를 자동으로 주입하는 @Autowired로 제공 1. @ComponentScan 컴포넌트 스캔을 사용하기 위해 @ComponentScan를 적용 @Component가 붙은 클래스를 찾아서 bean으로 등록함 @Configuration @ComponentScan( //스캔에서 제외할 것 -->@Configuration @Component임, AppConfig나 TestConfig제외하기 위해. excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, c..
1. AppConfig에서 method호출할 때 마다 인스턴스가 생성? 기존에 작성한 AppConfig를 보면 memberRepository를 두 번 호출한다. 그러면 MemoryMemberRepository가 두 번 생성되나???? 엥? 싱글톤인데??? 깨지나??? 스프링 컨테이너는 싱글톤 보장해준다고 했는데..? 2. 그러면 두 클래스에 들어가는 memberRepository가 같은지 보자. public class ConfigurationSingletonTest { @Test void configurationTest(){ AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); Memb..
웹 애플리케이션은 보통 여러 고객이 동시에 요청을 한다. 요청이 올 때마다 객체를 만들어야 하나??? 1. 스프링 없는 DI 컨테이너 스프링 없는 DI 컨테이너 사용 호출 될 때 마다 객체를 생성하는지 확인 public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer(){ AppConfig appConfig = new AppConfig(); //1. 조회 : 호출할 때 마다 객체를 생성 MemberService memberService = appConfig.memberService(); //2. 조회 : 호출할 때 마다 객체를 생성 MemberService memberService2 = appConfig.m..
XML로 설정해보자아 1. Xml사용 스프링 부트 사용하면서 잘 사용안함... 레거시 프로젝트들이 xml로 되어있음. xml을 사용하면 컴파일 없이 빈 설정 정볼르 변경할 수 있다는 장점도 있음!! GenericXmlApplicationContext를 사용 bsh-developer.tistory.com 스프링은 어떻게 다양한 설정 형식을 지원하지? BeanDefinition이라는 추상화 때문임! 역할과 구현을 개념적으로 나눈 것! - xml을 읽어서 BeanDefinition을 만들면 된다. - 자바 코드를 읽어서 BeanDefinition을 만들면 된다. - 스프링 컨테이너는 자바 코드인지, 뭔지 몰라도 된다. - 스플이 컨테이너는 BeanDefinition만! 알면 된다!!!!!! BeanDefini..