컴포넌트의 검색 범위
2021. 5. 9. 00:17
스프링
Component의 검색 범위. @Component(basePackage = "hello.core.member") 여러개도 가능하고, 시작위치를 지정할 수 있다. 지정 안하면 @ComponentScan 이 붙은 설정정보 클래스 패키지가 시작위치 최상위에 @ComponentScan 지정하면 그 밑으로 다 검색한다. basePackage 생략가능. 스프링부트는 걸려 있어서 따로 할 필요가 없긴 하다. 컴포넌트 스캔의 기본 대상. 컴포넌트 스캔은 @Component 뿐만 아니라 아래도 포함 @Controller @Service @Repository @Configuration 어노테이션에는 상속관계가 없다. 자바기능이 아니고, 스프링이 지원하는거다. useDefaultFilters 옵션은 기본적으로 켜져있다. ..
@ComponentScan 컴포넌트 스캔
2021. 5. 9. 00:02
스프링
빈을 일일히 등록하는게 너무 귀찮다. 누락될 가능성도 높고.. 개발자는 반복을 싫어한다.!! 그래서! 설정정보가 없어도 자동으로 스프링빈을 등록하는 컴포넌트 스캔을 제공한다. 컴포넌트 스캔. @Configuration @ComponentScan //excludeFilters = @ConponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class; //이 친구 빼겠다. @ComponentScan 붙여서 사용한다. @Component 어노테이션이 붙은 클래스를 스캔해서 빈으로 등록 해 준다. 그냥 쟤들 자동으로 다 등록하면 의존관계 주입은 어떻게 할건데? @Autowired 를 이용해서 주입을 시켜줘야 한다. 컴포넌트 스캔이 있으..
@Configuration , 그리고 싱글톤
2021. 5. 8. 23:20
스프링
@Configuration , 그리고 싱글톤 스프링 초기화 과정에서 Bean 등록된 객체들을 생성이 되는데, 어쨌든 스프링도 java이기 때문에 호출의 중복으로 중복생성이 될 수 있다? 그러면 싱글톤이 깨지는 것인가? 스프링이 그럴리가 없다. 결국 같은 놈들이다. 스프링 컨테이너는 싱글톤 레지스트리다. 스프링 빈이 싱글톤이 되도록 보장이 되어야 한다. 그래서 @Configuration이 출동한 것이다. 스프링이 CGLIB 바이트코드 조작 라이브러리 사용, 임의의 다른 클래스 만들고 그 다른 클래스를 스프링 빈으로 등록. 결국 실제로 내가 등록한 빈이 아니고 오버라이드 된 다른놈이 등록 되는 것. 그것은 싱글톤을 보장하도록 한다. 그럼 @Configuration 안붙이면? 주작없이 그냥 중복 생성 싱글톤 ..
싱글톤 주의점
2021. 5. 3. 00:42
스프링
[싱글톤 방식의 주의점] 무상태로 설계해야 한다. 여러 클라이언트가 하나의 객체 인스턴스를 공유하기 때문에 상태유지를 하면 안 된다. 1. 특정 클라이언트에 의존적인 필드가 있으면 안 된다. 2. 변경 또한 하면 안 된다. 3. 읽기만 하는 것이 좋다. 4. 필드 대신 지역변수,파라미터,쓰레드로컬 등을 사용해야 한다. 스프링 빈의 필드에 공유값을 설정하면 ㄹㅇ 망할 수 있다. 예를들어 A,B의 요청이 있는데 A가 값 꺼내려고 하는 사이에 B가 오면는 A의 값은 증발해버리고 B의 값이 A의 결과값에 들어가 버린다.