묻고 답해요
156만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
해결됨스프링 핵심 원리 - 기본편
어플리케이션의 구조와 스프링 컨테이너
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] 전체적인 그림이 머릿속에 잘 그려지지를 않아서 질문 드립니다... 1. 예를 들어, 클라이언트가 웹에서 요청을 하면 해당 요청이 서버 컴퓨터에 있는 프로그램의 main 메서드로 전달이 되고 main 메서드에서 MemberService 빈을 불러와서 처리가 되는 것인가요? 실제로 웹 어플리케이션(?)을 운영할 때에 CoreApplication 클래스의 main 메소드에서 AnnotationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig); 같은 코드를 적고 이 때 생성된 스프링 컨테이너 ac를 이용해서 요청이 들어올 때마다 MemberService 빈을 꺼내오는 건가요? 아니면 이런 코드가 필요없이 스프링에서 알아서 컨테이너를 만들고 컴포넌트 스캔을 해주는 건가요? 만약 그렇다면 이렇게 스프링 자체적으로 만든 컨테이너에는 어떻게 접근을 할 수 있나요? 2. 테스트 함수 내부에서 빈을 꺼내서 사용하는 일련의 코드들이 테스트가 아닌 실제 코드에서는 메인 메서드에서 구현되는 것인지 각 서비스 객체에 구현되는 것인지를 잘 모르겠습니다. 예를 들어, test.hello.core.autowired.AllBeansTest 에서 고객이 할인 정책을 선택하게끔 하는 예시는 실제로는 DiscountService 객체 내부에 메소드를 만들어서 처리하는 상황인 건가요? 3. 스프링 컨테이너에 직접 접근하고 getBean을 통해 빈을 꺼내오는 건 테스트 상황에서만 필요한 작업인가요? 프로토타입 빈을 받아오거나 하는 경우를 제외하면 서비스 객체나 리포지토리 객체 등에서 스프링 컨테이너에 접근할 일은 없는 건가요? 4. 실제 개발을 하면서 https://www.inflearn.com/questions/331154 이 질문에서와 같이 AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(ClientBean.class, PrototypeBean.class); AnnotationConfigApplicationContext ac2 = new AnnotationConfigApplicationContext(ClientBean.class, PrototypeBean.class); 와 같은 코드를 짜서 컨테이너가 2개 생성될 일은 없는 건가요? 교재에 있는 그림들을 보면 여러 클라이언트들이 하나의 컨테이너로부터 빈을 받는데 이 컨테이너는 스프링이 자체적으로 관리하는 컨테이너가 맞나요? 추가 질문. 지금처럼 전체적인 그림이 잘 안잡힌다면 이 상태로 mvc 강의를 듣는게 나을까요? 아니면 확실하게 모든 걸 이해하고 가는게 좋을까요?
-
해결됨스프링 핵심 원리 - 기본편
Lombok과 Qualifier
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예)2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)[질문 내용] <의존관계 자동 주입> 섹션의 <애노테이션 직접 만들기> 강의를 듣고 궁금한 부분이 생겨서 질문 드립니다. public OrderServiceImpl(MemberRepository memberRepository /*, @Qualifier("mainDiscountPolicy")*/ , @MainDiscountPolicy DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy;} 생성자 주입을 할 때 RateDiscountPolicy 클래스와 discountPolicy 파라미터 앞에 @MainDiscountPolicy를 붙여주는 방식으로 discountPolicy 파라미터에 주입될 객체를 지정해줄 수 있다는 것은 이해를 했습니다. 그런데 만약 Lombok을 사용한다면 생성자를 명시할 수가 없기 때문에 discountPolicy 파라미터 앞에 @MainDiscountPolicy를 붙여줄 수가 없게됩니다. 그러면 Lombok과 Qualifier를 같이 사용할 방법은 따로 없는 건가요?
-
해결됨스프링 핵심 원리 - 기본편
requestURL 관련 질문입니다.
안녕하세요. requestURL 관련 질문 드리겠습니다. MyLogger 빈은 HTTP request가 발생할 때 마다 생성되고, HTTP 요청은 특정 url로 이뤄지므로 requestURL을 빈 생성 시점에 알 수 있는 것이 아닌가요? request 스코프의 빈이 생성되는 시점에는 어떤 url로 요청이 발생했는지는 알 수 없는 것인가요? 감사합니다.
-
해결됨스프링 핵심 원리 - 기본편
ApplicationContext의 자동 주입 관련 질문
안녕하세요. 강의 관련해 질문 몇 가지 드리겠습니다. 1. 강의 초반에 단순한 방법으로 ApplicationContext를 주입 받아 getBean()으로 PrototypeBean을 조회하는데, 이 때 주입되는 ApplicationContext는 Test Code에서 new 해서 만든 객체와 같은 객체인건가요?? 2. 그럼 이 코드를 테스트가 아닌 앱 코드에서 사용한다고 했을 때는 스프링이 자동 주입된 빈을 관리하는 ApplicationContext를 생성하여 들고 있다가 주입해주게 된다고 생각하면 될까요? 3. 2번이 맞다고 한다면, 스프링 코드 내에서 자동 주입 + ApplicationContext를 통한 수동 등록을 같이 사용하게 되면 ApplicationContext가 여러 객체 존재할 수도 있는 것인가요? 4. 강의 내용 중 '스프링 애플리케이션 컨텍스트' 라는 표현이 나오는데 이게 스프링 컨테이너와 같은 의미일까요? 5. 마지막으로 직접 new를 통해 구현체를 할당하는 것과 DL을 하는 것의 차이점이 무엇인지 궁금합니다. 빈을 '찾는다'는 행위의 유무가 차이점일까요..? 감사합니다.
-
해결됨스프링 핵심 원리 - 고급편
강의 학습 중 공통(부가)기능 처리 방법에 대한 질문입니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 아니오2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용]안녕하세요. 스프링 핵심원리 고급편에서 다루는 주요 내용인 핵심기능과 공통(부가)기능을 어떻게 나눌 것인가를 듣다보니 어느덧 AOP 챕터까지 다다르게 되었습니다. 강의를 통해 부가기능의 종류에는 크게 로깅, 트랜잭션처리, 접근권한확인이 있다고 생각이 들었습니다. 이것들은 앞에서 다룬 개발 패턴이나 AOP를 사용하지 않고도 유틸리티성 클래스를 통해 처리가 가능한 것으로도 알고 있지만 SOLID 원칙, 유지보수 효율 증대, 중복 코드 제거 등의 많은 이점을 가져다주기 때문에 AOP와 같은 기술을 사용하는 것은 이해를 했습니다. 그러나 Filter/HandlerInterceptor를 사용해서도 부가기능을 처리할 수 있을 것으로도 생각이 드는데요.(스프링 MVC 강의 학습을 통해 느낀 점입니다.) 저와 비슷한 생각을 가지고 계신 다른 분께서 질문한 글의 답변을 인용하자면 웹과 관련된 공통(부가)기능(특정 메뉴 접근권한 확인, 로그인 여부 확인 등)는 Filter/HandlerInterceptor를 통해 처리하고, 순수한 자바 코드를 통한 공통(부가)기능은 AOP를 이용하는 것이 맞는 것인지 궁금합니다. (참고 질문: https://www.inflearn.com/questions/495293) 물론 더 나아가 시큐리티를 알고 있다면 이런 질문 내용도 다른 방식으로 해결이 가능하겠지만, 만약, 시큐리티를 현재 모르고 있다라는 가정하에 위와 같이 실무에서도 처리하는게 맞는지 첨언 부탁드리겠습니다. 미리 답변 감사드립니다.
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
질문 있습니다.
코틀린에서는 null 사용을 안전하게 하기 위해서 null 이 들어갈 수 있는 변수를 완전히 다른 타입으로 간주하고 아래와 같이 효과적으로 관리할 수 있다. 라고 말씀해주셨는데요 그렇다면 String과 String? 타입은 엄연히 다른 타입 인것이고 String? 이 자체를 하나의 타입으로 간주해야하는건가요? String? 이렇게 생긴 타입은 코틀린에서는 클래스로 정의 되어 있지 않아서요..!
-
미해결자바 개발자를 위한 코틀린 입문(Java to Kotlin Starter Guide)
3. 클래스를 상속받을 때 주의할점 질문
그 Base 와 Derived를 설명 해 주실 때 1. 상위 클래스 생성자가 실행되는 동안 하위 클래스의 프로퍼티 즉 Derived를 인스턴스화 한다는 말은 2. Derived에 있는 number에 값을 집어 넣어준다는 건데 3. 이때 상위 클래스에서 넘버를 호출하게 되면 하위 클래스에 있는 넘버를 가져오잖아요 4. 근데 아직 상위 클래스의 constructor가 먼저 실행된 단계라서 하위 클래스에 number 라는 값에 초기화가 이루어지지 않아서 0 이 나오는 거에요. (3.)을 삽질을 조금 해가며 찾아봤었는데, 제가 이해했는게 맞는지 질문드립니다. "open 된 부모 클래스의 필드는 사용자가 지정한 값을 무시하고, 기본 값을 할당한다. 이후 자식 클래스에서 같은 이름의 필드를 만들어 사용한다. (쉐도잉)" 그래서 부모 클래스 Base init {..} 안에 open 필드를 사용하면 기본값이 나온다고 이해 했습니다. 제가 이해한 내용이 맞을까요? - - <장문 주의> - - 이런 결론을 내게된 과정은 아래와 같습니다. 자바로 디컴파일을 해보니, 코틀린은 생성자를 여러 개를 역할 나눠 순서대로 사용하더라구요. 1, (기본 값) (사용여부를 나타내는 이진수) (기본생성자 마커)각 매개변수에 넣을 기본 값을 지정. var 로 선언하더라도 동일 public Base() { this(0, 0, 0, 0, 0, 31, (DefaultConstructorMarker)null);} 2. (사용여부를 나타내는 이진수)를 바탕으로 초기화를 하는 생성자 예) 총 5개중에 첫번째, 세번째 변수 사용 => 10100 public Base(int var1, int var2, int var3, int var4, int var5, int var6, DefaultConstructorMarker var7) { // 매개 변수를 5개를 사용해서, 6번째에 사용여부 이진수를 넣음 if ((var6 & 1) != 0) { var1 = 100; } if ((var6 & 2) != 0) { var2 = -1; } if ((var6 & 4) != 0) { var3 = -11; } if ((var6 & 8) != 0) { var4 = -22; } if ((var6 & 16) != 0) { var5 = -33; } this(var1, var2, var3, var4, var5) 3. 일반적인 생성자 코드와 init {...} 안의 내용 public Base(int number, int base, int hoho, int hihi, int hehe) { this.number = number; this.base = base; this.hoho = hoho; this.hihi = hihi; this.hehe = hehe; String var6 = "Base Class " + this.base; System.out.println(var6); var6 = "B " + this.getNumber(); System.out.println(var6);} 즉 Base 부모 클래스에는 open 한 변수들은 바로 위에 적힌 (3. 생성자)를 통해 기본값이 할당된 상태로 그냥 존재하더라구요. public class Base { private final int number; // open 한 매개변수 private final int base; // open 한 매개변수 private final int hoho; private final int hihi; private final int hehe; 이후 Derived 자식 클래스에 의해 부모 클래스의 매개변수들이 가려졌었습니다. public final class Derived extends Base { private final int number; private final int derived; 자식 클래스의 초기화 여부와 상관없이 부모클래스 안에서, 부모 필드를 호출했으니 0이 나오게 되는 거더라구요. 이후 자식 객체에서 같은 이름으로 쉐도잉 되는데, 가려졌을 뿐 힙 메모리 상에는 부모클래스의 필드는 그대로 0 이구요. 제가 이해한 내용이 맞을까요? ---------------- 혹시 getter 로 접근하는 것과 필드에 직접 접근하는 거에 차이가 있는건가 싶어서, 그것도 확인해보았는데 - 내부에서만 사용하는 경우 getter로 접근하지 않고 직접 필드 접근으로 최적화 되었습니다. String var3 = "Derived Class " + this.derived;System.out.println(var3); - open 을 사용하거나 override된 필드는 getter로 접근하더라구요. var3 = "D " + this.getNumber();System.out.println(var3); 근데 최적화의 차이만 있을 뿐, this.number 로 변경되더라도 결과는 다르지 않을 듯 합니다. Base init{..} 은 어차피 부모 필드를 호출하게 되니까요.
-
해결됨스프링 핵심 원리 - 기본편
컴포넌트 스캔 동작 이유
안녕하세요! 이번 강좌의 테스트는 스프링을 올려서 하는 통합 테스트가 아님에도 컴포넌트 스캔 등이 동작하였는데 이 이유가 스프링 프레임워크에 포함되는 AnnotationConfigApplicationContext를 직접 생성해줬기 때문일까요? 감사합니다.
-
미해결스프링 핵심 원리 - 기본편
discountPolicy.discount 두번째 인자를 전달하는 사유가 궁금합니다.
[질문 템플릿]1. 강의 내용과 관련된 질문인가요? 예2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? 예3. 질문 잘하기 메뉴얼을 읽어보셨나요? 예[질문 내용] OrderServiceImpl.java 파일에서discountPolicy.discount 메소드의 두번째 인자값으로 물건가격(itemPrice)를 넘기는 것으로 확인했습니다. 그런데 FixDiscountPolicy 구현체에 있는 discount 메소드 에서는 price 변수값을 사용하지 않는 것으로 보이는데요, 물건가격(itemPrice)를 넘기는 이유가 무엇인가요?
-
미해결스프링 핵심 원리 - 기본편
@Primary, @Qualifier 우선순위
수업 항상 재밌게 잘 듣고 있습니다ㅎㅎ https://www.inflearn.com/questions/409588 해당 글과 같은 의문점이 들어서 선생님 말씀대로 직접 테스틀 해보았습니다. 1) rateDiscountPolicy 스프링 빈에 @Primary 를 설정하고, 2) fixDiscountPolicy 스프링 빈에 @Qualifier("subDiscountPolicy") 이렇게 설정했습니다. @Autowiredpublic OrderServiceImpl(MemberRepository memberRepository, @Qualifier("subDiscountPolicy") DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; System.out.println("discountPolicy = " + discountPolicy);} 둘 중에 뭐가 더 우선권이 높은지 확인해보기 위해 OrderServiceImpl의 생성자에서 discoutnPolicy를 출력하는 코드를 추가하고 기존에 작성한 AutoAppConfigTest 테스트 코드를 실행해봤는데, discountPolicy = hello.core.discount.FixDiscountPolicy@74a6a609 다음과 같이 2)에서 설정한 fixDiscountPolicy가 주입된 것을 확인했습니다. 1. 우선 순위부분에서 @Qualifier > @Primary 이기 때문에, 동시에 적용했을 때 다음과 같은 결과가 나오는게 맞는 건가요?? 2. 아래 글에 따르면, 메인 DB의 커넥션을 획득하는 스프링 빈은 @Primary를 지정, 서브 DB의 커넥션을 획득하는 스프링 빈은 @Qualifier를 지정한다고 하였습니다. 그런데 위에서처럼 @Primary, @Qualifier를 각 스프링 빈에 지정해 놓으면, 어떻게 때에 따라 해당 빈이 주입되도록 할 수 있나요??.. 1번의 OrderServiceImpl 생성자처럼 @Qualifier 코드를 추가해놓으면 항상 우선순위에 따라 빈에는 서브 DB 커넥션을 획득하는 스프링 빈(예제에서는 FixDiscountPolicy)가 들어가게 되지 않나요?? 3. 아래 질문의 내용처럼 직접 테스트를 해보니 @Autowired 필드명 매칭 방식 보다 @Primary 방식이 우선권이 더 높다는 것도 확인했습니다. https://www.inflearn.com/questions/129469 그러면 전체 우선권은 @Qualifier > @Primary > @Autowired 필드명 매칭 이렇게 되는 건가요??
-
미해결스프링 핵심 원리 - 기본편
질문있습니다!
안녕하세요! 강의 너무 재밌게 잘 듣고 있습니다. 몇가지 질문이 있는데요! 1. OrderServiceImplTest의 createOrder() 가 순수한 자바로 테스트하는 코드라고 하셨는데, 정확히 그 의미가 어떤 것 인가요?? 스프링 컨테이너를 생성해서 getBean(OrderService.class) 이런식으로 받아오지 않고 new OrderServiceImpl()로 생성해서 테스트하기 때문인가요?? 2. 4분 28초쯤에 createOrder() 테스트를 실행하면 오류가 나서 선생님께서 AppConfig의 orderService()의 return을 null로 바꾸셨습니다. 저는 createOrder()에서 new orderServiceimpl() 생성자를 호출하면 OrderServiceImpl 클래스의 디폴트 생성자가 호출된다고 생각했는데, 오류가 왜 AppConfig에서 나는 건가요?? 왜 저기 코드를 고쳐야하는건지 이해가 잘 가지 않습니다ㅠㅠ
-
미해결스프링 핵심 원리 - 기본편
InitalizingBean 과 설정정보(init)의 차이 중 외부 라이브러리에서 사용 가능 불가능의 차이
initalizingBean 같은 경우는 스프링에 의존하기 때문에 외부라이브러리에서 사용하지 못한다고 배웠습니다. 구체적으로 왜 사용하지 못하는지 예시를 들어주시면 감사하겠습니다. 왜냐하면 아래와 같은 의문이 생겼기 때문입니다. 외부 라이브러리를 만드는 사람이 그냥 이미 intializingBean 같은 것을 implement 해놓은 상태이면, 저희가 수정하지 못하더라도 쉽게 초기화, 종료 등을 사용할 수 있는 거아닌가 싶어서 질문드립니다. 그런 점이라면, 굳이 @Bean설정정보방식을 써야하는 이유를 모르겠습니다.
-
미해결스프링 핵심 원리 - 기본편
야생형 코스 간다면 로드맵이 어떻게 되나요 ?
기본편을 방금 완강 했는데 활용편 1 - 먼저 활용편 1을 쭉 따라 치며 전체 기술과 백엔드 서비스 개발의 감을 익힙니다. (이해가 좀 부족해도 우선 진행하시길 권장합니다.) JPA 기본편 - JPA 기본 내공을 다집니다. 활용편 1 복습 - 이미 기본편을 학습한 상태이기 때문에 처음부터 다시 쭉 따라하다 보면 JPA의 깊이있는 내용을 이해할 수 있습니다. 활용편 2 - 실전에서 JPA를 개발하고, JPA 성능 최적화를 어떻게 하는지 이해합니다. 스프링 데이터 JPA - 실무에서 필요한 기능 위주로 스프링 데이터 JPA를 학습합니다. Querydsl - 복잡한 쿼리와 동적쿼리 문제를 해결합니다. 순서로 강의를 모두 들은 후에 모든 개발자를 위한 HTTP 웹 기본 지식 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 스프링 DB 1편 - 데이터 접근 핵심 원리 스프링 DB 2편 - 데이터 접근 활용 기술 출시 예정 스프링 핵심 원리 - 고급편 이 순서로 마저 들으면 되나요 ? 강의를 모두 결제했는데 야생편을 따라 가보려고하는데 어떤 순서로 들어야할지 모르겠습니다 저때 당시에는 MVC강의를 비롯해서 나오지 않아서 저렇게 추천하신건가요? 스프링 완전 정복 로드맵 듣고 JPA와 실무 완전 정복 로드맵으로 넘어가면되나요?> 로드맵이 헷갈립니다
-
미해결스프링 핵심 원리 - 기본편
@Quilifier, @Primary를 써야 할 이유?가 궁금합니다
스피링 빈에 등록할 때 굳이 같은 이름으로 등록 해야만 할 때가 있나요 ?? 다른 이름으로 빈을 등록해서 사용하는 것이 더 편하지 않나요 ??.. 같은 이름으로 빈을2개나 등록하고 애노테이션을 써야하는 불편함을 감수하고도 등록해야할 때가 어느 때인지가 궁금합니다.
-
미해결스프링 핵심 원리 - 기본편
왜 오류가 발생할까요 ?
강의에 나오는대로 @Component와 @autowired를 다 등록했는데 오류가 발생합니다
-
미해결스프링 핵심 원리 - 기본편
@Bean 등록 질문입니다
Appconfig에 @configuration 과 @Bean 이 있잖아요 그럼 처음에 스프링 컨테이너에는 Appconfig라는 클래스만 등록하고 그 뒤에는 원하는 클래스가 Spring Container에 있으면 그걸 반환하고 없으면 Appconfig에서 찾아서 Spring Container에 등록하고 반환해주는건가요 ? 처음에 실행하면 @Bean 붙은걸 다 Spring Container 등록하는건 아닌거죠 ? 필요할때마다 등록하게 되는 구조? 인건가요 ? 만약 Appconfig에 사용하지 않는 Bean이 있다면 이건 Spring Container에 등록되지 않나요 ?
-
해결됨스프링 핵심 원리 - 기본편
DIP OCP
안녕하세요 이전부터 solid에 관해 자주 강의에서개념이 나와서 좋습니다. 잠시 하나 짚고 넘어가고싶습니다 제가 생각하는게 맞는지 DIP가 위반이되면 구현체에 의존을하니까 자연스럽게 덤으로 OCP까지 위반이 되는건 당연하다고 생각이드는데 제가 생각하는게 맞는건가요 ?
-
해결됨스프링 핵심 원리 - 기본편
ac.close method
아래의 코드 처럼 ApplicationContext로 스프링 컨테이너를 사용해서 스프링 빈의 생명주기를 Test해 보았는데요. init은 출력이 되었지만 close는 출력되지 안되더라구요. 1. Spring을 수동으로 내려 주지 않으면 Spring Bean이 내려갈때 소멸전 콜백은 실행되지 않는건가요? 2. ApplicationContext로 실행 했을때는 13:15:33.326 [main] DEBUG org.springframework.context.annotation.AnnotationConfigApplicationContext - Closing org.springframework.context.annotation.AnnotationConfigApplicationContext@53aac487, started on Mon May 02 13:15:33 KST 2022 이와 같은 로그가 뜨지 않았는데 제가 Test로 해서 Spring Container가 내려 가지 않은건가요(Spring이 종료가 되지 않음)? 난잡한 변수명 이해부탁 드립니다. 감사합니다. package hello.core.lab; import org.junit.jupiter.api.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; public class SpringClose { @org.junit.jupiter.api.Test void ContainerClose() { ApplicationContext ac = new AnnotationConfigApplicationContext(TestConfig.class); // ac.close(); } @Configuration static class TestConfig { @Bean public Test hi() { return new Test(); } } static class Test { @PostConstruct public void init() { System.out.println("init"); } @PreDestroy public void close() { System.out.println("close"); } } }
-
해결됨스프링 핵심 원리 - 기본편
lombok관련질문입니다
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.1. 강의 내용과 관련된 질문을 남겨주세요.2. 인프런의 질문 게시판과 자주 하는 질문(링크)을 먼저 확인해주세요.(자주 하는 질문 링크: https://bit.ly/3fX6ygx)3. 질문 잘하기 메뉴얼(링크)을 먼저 읽어주세요.(질문 잘하기 메뉴얼 링크: https://bit.ly/2UfeqCG)질문 시에는 위 내용은 삭제하고 다음 내용을 남겨주세요.=========================================[질문 템플릿]1. 강의 내용과 관련된 질문인가요? (예/아니오)네2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예/아니오)네3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예/아니오)네[질문 내용]여기에 질문 내용을 남겨주세요. 강의에서는 lombok을 이용해서 생성자가 1개인 경우를 기준으로 간단하게 나타내는것을 알려주셨는데 시스템이 복잡하게 될 경우 생성자를 2개이상사용하게 될때도 lombok으로 간단하게 표현을 할 수가 있나요?
-
해결됨스프링 핵심 원리 - 기본편
ComponentScan 질문 있습니다.
강의에서 SpringBootApplication이나 ComponentScan 어노테이션이 붙어 있으면 자동으로 스프링 빈을 스프링 컨테이너에 등록해주고 의존관계 설정을 해준다고 하셨는데 그러면 혹시 RateDiscountPolicy와 FixDiscountPolicy 두 클래스에 모두 @Componet 어노테이션을 붙이면 OrderServiceImpl의 discountPolicy는 어떤 클래스로 주입이 되는건가요?