Open EzKorry opened 4 years ago
지정한 패키지 내에서 애너테이션으로 컨테이너에 빈을 등록하려 할 때 필요한 설정(추가적인 패키지와 제외할 패키지경로 설정방법도)
빈 자동 연결 시 반드시 1:1로 연결이 되어야 하는가? 1:n 이 가능한 방법은?
@autowired 와 @Qualifier 을 사용했을 때 스프링이 빈을 찾아가는 과정과 @Resource 를 사용했을 때의 과정을 설명하고 반드시 @Resource를 사용해야하는 경우를 설명하시오
스프링 검증 api와 JSR380 api를 사용성 측면에서 간단히 비교하고 JSR380 의 제약사항 애너테이션을 10가지 이상 나열하라 (알아두면 좋을거같아서ㅋㅋ 구글링 ㄱ)
구체적인 클래스의 직접 참조가 아닌 인터페이스를 활용한 프로그래밍을 했을 때의 장점과 스프링이 이러한 설계 방식에 적합한 이유(낼게업어성.. chapter2 활용함..)
@Autowired
, @Inject
, @Resource
세 개의 차이점을 설명하세요. (구글링 고)
스프링 컨테이너가 생성될 때가 아닌, 실제 빈을 사용할 때 빈 객체를 만들고 싶다면 어떤 어노테이션을 활용하면 되는가?
빌드 종류에 따라서 다른 빈을 만들고 싶다면 어떤 기능을 활용하면 되는가? 예를 들어 개발 모드와 배포 모드에서 다른 종류의 빈을 생성하고 싶다면?
@Autowired(required=false)
설정된 여러 개의 생성자가 있다고 가정했을 때, 스프링은 어떤 생성자를 선택해서 객체를 만들까?
@Component' 어노테이션에
value속성을 주면 그게 빈 이름으로 설정되는데, 만약 아무
value`도 설정하지 않았다면 해당 빈의 이름은 무엇으로 설정되는가?
- 지정한 패키지 내에서 애너테이션으로 컨테이너에 빈을 등록하려 할 때 필요한 설정(추가적인 패키지와 제외할 패키지경로 설정방법도)
- 빈 자동 연결 시 반드시 1:1로 연결이 되어야 하는가? 1:n 이 가능한 방법은?
- @Autowired 와 @qualifier 을 사용했을 때 스프링이 빈을 찾아가는 과정과 @resource 를 사용했을 때의 과정을 설명하고 반드시 @resource를 사용해야하는 경우를 설명하시오
- 스프링 검증 api와 JSR380 api를 사용성 측면에서 간단히 비교하고 JSR380 의 제약사항 애너테이션을 10가지 이상 나열하라 (알아두면 좋을거같아서ㅋㅋ 구글링 ㄱ)
- 구체적인 클래스의 직접 참조가 아닌 인터페이스를 활용한 프로그래밍을 했을 때의 장점과 스프링이 이러한 설계 방식에 적합한 이유(낼게업어성.. chapter2 활용함..)
@Configure
어노테이션을 쓴 객체에 @ComponentScan
어노테이션을 추가하여 클래스를 검색하고 등록하도록 할 수 있다. basePackages
속성을 주면 검색해야 하는 패키지를 지정해주며, excludeFilters
와 includeFilters
속성으로 각각 제외할 조건과 포함할 조건을 줄 수 있다.
기본적으로 bean이 싱글톤이니까 @Autowired
등으로 빈을 가져올 때 가져오는 객체는 모두 같을 것이다. @Autowired
설정된 생성자일 경우, required
속성이 True
인 오직 하나의 생성자이거나, required
속성이 False
인 여러 개의 생성자로 구성할 수 있다. (1:1, 1:n이라는 게 무슨 뜻인지 잘 모르겠음.ㅠ)
@Autowired
는 우선 타입을 찾는다. 만약 @Qualifier
어노테이션이 붙어있다면 일치하는 타입 중에서 2차로 이름을 검색한다. 반면 @Resource
는 처음부터 이름으로 바로 찾는다. 타입은 상관이 없다. 빈 자체가 Map
타입인 경우 @Autowired
는 제대로 작동하지 않으므로 @Resource
어노테이션을 사용해야 한다.
스프링 검증 API의 일부인 Validator
인터페이스를 활용하려면, 우선 해당 인터페이스를 구현하는 클래스를 정의해야 하고, 실제 검증 단계에서는 감싼 곳에서 Validator
객체를 만들어서 validate
를 호출하고 getErrorCount()
로 에러 개수를 센 다음에 분기를 만들어야하고.. 여하튼 복잡해진다. 반면 JSR380 어노테이션을 이용하면 javax.validation.Validator
를 이용하여 단순 검증할 수 있다. 새로운 클래스를 정의할 필요가 없다.
종류 원래 있던 것:
@AssertTrue @AssertFalse @DecimalMax @DecimalMin @Max @Min @Digits @Size @Null @NotNull @Pattern
새롭게 추가 된 것:
@NotEmpty @NotBlank @Positive @PositiveOrZero @Negative @NegativeOrZero @Email @Future @FutureOrPresent @Past @PastOrPresent
인터페이스를 활용한 프로그래밍은 객체간 의존 관계를 느슨하게 해주어 테스트를 편하게 할 수 있고 구현부의 수정이 자유롭다. 스프링이 이러한 설계 방식에 적합한 이유...는 사실 잘 모르게따..ㅎㅎ 그냥 모든 어플리케이션을 통틀어서 클래스를 설계할 때 제약사항과 구현부를 분리하는 건 좋은 전략이라고 생각함..... 파이썬 같은 경우도 사용자 정의 클래스를 만들때 어떤 특별 메소드를 구현하기만 하면 파이썬의 기능을 가져다가 쓸 수 있는 아주 편리한 메커니즘이 있음.
@Autowired, @Inject, @Resource 세 개의 차이점을 설명하세요. (구글링 고) @Autowired type으로 자동연결 @inject - 타입으로 연결안되면 name으로 자동연결, 자바에서 지원하는 어노테이션이기 때문에 스프링 프레임워크에 종속적이지 않음. @Resource - 이름으로 연결안되면 타입으로 자동연결. 마찬가지로 자바에서 지원
스프링 컨테이너가 생성될 때가 아닌, 실제 빈을 사용할 때 빈 객체를 만들고 싶다면 어떤 어노테이션을 활용하면 되는가? @lazy
빌드 종류에 따라서 다른 빈을 만들고 싶다면 어떤 기능을 활용하면 되는가? 예를 들어 개발 모드와 배포 모드에서 다른 종류의 빈을 생성하고 싶다면? 빈 정의 프로파일
@Autowired(required=false) 설정된 여러 개의 생성자가 있다고 가정했을 때, 스프링은 어떤 생성자를 선택해서 객체를 만들까? 만족하는 의존 관계 개수가 가장 큰 생성자로 인스턴스가 만들어짐
@Component' 어노테이션에 value속성을 주면 그게 빈 이름으로 설정되는데, 만약 아무value`도 설정하지 않았다면 해당 빈의 이름은 무엇으로 설정되는가? 클래스에서 첫번째 글자를 소문자로 바꾼 이름
2번 1:n문제는 @autowired 로 자동연결할 때 여러 빈을 한 변수에 담을수 있냐는 말임ㅋㅋ말을 넘 어렵게 했는데 260 페이지 보면 @Qualifier지정자 사용해서 여러 빈을 Set타입 변수에 담는 예제가 있드라고ㅋㅋ
책 공부