10/12
private final UserRepository userRepository;
private final DiscountInfo discountInfo;
인터페이스 참조변수를 클래스의 멤버로 선언하면. 기본값은
뭐가 될까
10/13
DI 주입 생성자 vs setter(수정자)
https://yaboong.github.io/spring/2019/08/29/why-field-injection-is-bad/
10/14
component와 componentscan은 spring에서 해주는 거고
@Configuration @Bean 은 자바 기반의 ...
Spring container들은 런타임이 아니고, 첫 실행 시점에 bean을 전부 생성해서 관리한다.
중요)bean과 component의 차이점
=> bean은 생성자에 달았다. component는 클래스에 달았다.
bean은 메서드 레벨, component는 클래스 레벨에서 사용하도록 나누어져 있다.
외부 라이브러리를 사용할 때 bean을 사용할 것이며(library가 지정한 타입을 container에 넘겨주기 위해서는 bean을 사용해야 한다), 우리가 작성한 코드들에는 component를 사용하게 될 것이다.
외부 라이브러리에 component를 사용하려면 라이브러리 코드 위에 붙여야되는데, 코드를 다 긁어오기는 어렵기 때문이다.
스프링 컨테이너는 최종적으로 의존하는 객체들을 먼저만들고 그 이후에 그 객체를 사용하는 객체들을 만든다. 작은 것들에서 큰 것들의 순서로 객체를 생성한다.
10/17
cannot resolve SpringBootTest 오류
=> 구글링 해봐도 명확한 답이 없었는데
src폴더에 main폴더가 있고 test 폴더가 있다.
build.gradle에 아무리 assertj를 넣고 spring-boot-start를
넣고 해도 해결이 되지 않았는데, 내가 test 파일을 test폴더가 아닌 main 폴더 하위에 넣었기 때문이었다. buld.gradle의 설정에는 Test폴더에서 test를 실행한다는 전제 하에 dependencies가 설정되어 있었기 때문이다.
URClass AOP 실습 aspect3
현재 실행순서는 트랜잭션 → 로그(log)가 되고 있는데 간단하게 이 순서를 바꾸려면 logging에 이름을 doLog로 변경하면 로그 → 트랜잭션 순으로 출력하게 된다.
=> 같은 apsect 안의 advice사이에서는 이름순으로 실행된다.
그러나 순서는 JVM이나 실행 환경에 따라 달라질 수 있다.
Spring AOP pointCut 표현식
https://icarus8050.tistory.com/m/8
? AopTest.java에서 왜 success() -> aopInfo() -> exception()의 순서로 출력되나
=> 크루님 답변 : 너무 깊이 들어가야 해서 답변이 힘들다
10/18
AOP - proxy방식(런타임에 spring container가 관여) 사진참조
spring container가 런타임에 aspect와aspect가 적용될 핵심기능이 결합된 MemberRepository라는 객체를 MemberService에 미리 만들어놓고 제공한다.