Spring(89)
-
[Spring] ComponentScan Filter에 대한 나름의 이해
includeFilters와 excludeFilters가 있다. @ComponentScan( includeFilters = @Filter( classes = MyIncludeComponent.class ), excludeFilters = {@Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class), // @Filter(type = FilterType.ASSIGNABLE_TYPE, classes = BeanA.class) } includeFilters는 그 annotation이 붙은 클래스를 추가로 bean에 등록한다. 이때 @Component도 등록 된다. 추가 개념이다. excludeFilters는 그 annotation이 붙은 ..
2023.10.04 -
[Spring] ComponentScan 대상에 대한 나름의 이해
ComponentScan의 기본 스캔 대상에 대한 인자로 basePackages, basePackageClasses가 있는데 basePackages는 직접 스캔을 시작하는 패키지를 지정해주는 것이다. basePackageClasses는 Class 바로 위에 있는 Package로부터 시작된다. 저것들을 안넣어준 디폴트는 그 class의 바로 위에 있는 package가 스캔의 대상이 된다. 그런데 SpringBoot를 이용하면 @SpringBootApplication 안에 @ComponentScan이 포함되어 프로젝트 최상위 패키지부터 스캔을 알아서 해준다. 즉 ComponentScan을 따로 할 필요가 없는 것이다. @Controller, @Repository, @Service, @Configuration..
2023.10.03 -
[Spring] ComponentScan에 대한 나름의 이해
@ComponentScan을 붙이게 되면 @Component가 붙은 모든 class를 빈으로 자동 등록한다. 이때 발생할 수 있는 문제점이 의존관계를 어떻게 주입할지이다. 그래서 생성자 위에 @Autowired를 붙여주면 자동으로 의존관계를 주입해준다. ac.getBean(type.class)과 같이 컨테이너에서 type으로 찾아서 주입한다고 볼 수 있다. 그러면 충돌이 발생할 수도 있는데 이는 다음에 다룬다. excludedFilters를 활용하면 원치 않는 component는 제외할 수 있다. 그리고 등록이 될 때는 class 이름이 이름으로 등록되는데 앞글자가 소문자로 바뀐다. Reference https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%..
2023.10.02 -
[Spring] @Configuration에 대한 나름의 이해
@Configuration이 있어야 싱글톤을 보장한다. 그렇지 않으면 자바 로직 그대로 된다. @Configuration을 하면 AppConfig.class를 상속하는 클래스를 만들어 각각의 메소드를 오버라이드 시킨다. 그리고 그걸 설정파일 이름을 이름으로 하여 빈에 등록시킨다. 이때 핵심은 만약 그 메소드에 해당하는 빈이 이미 등록되어 있다면 그걸 가져오고 아니면 새로 등록을 하는 로직을 자체적으로 추가한다. 그렇지 않으면 객체를 여러개 만들게 되고 이는 빈에 등록되어 있지 않는 것이다. 이는 싱글톤이 아니고 구현체에서 자체로 객체를 만들어주고 넣어주는 거랑 큰 차이가 없다. (DIP와 OCP는 만족하기는 한다) 결론적으로 설정파일을 만들때는 @Configuration을 붙여주자!!! Reference..
2023.10.01 -
[Spring] 스프링 싱글톤 컨테이너 Configuration에서 주의점과 나름의 이해
메소드에 static을 붙이면 singleton을 보장하지 않는다. 하나의 메소드(빈)에 대한 객체는 오직 하나만 생성된다. 메소드에 대한 호출도 오직 한번만 된다. Reference https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8&unitId=55365 학습 페이지 www.inflearn.com
2023.09.30 -
[Spring] 싱글톤 컨테이너의 문제점
클래스에 필드가 있게 되면 만약 그 클래스가 빈에 등록되면 이용자들 간에 같은 객체를 사용하는 꼴이 되니 필드도 마찬가지로 공유된다. 이렇게 되면 원하지 않는 결괏값이 나올 수 있다. 더군다나 멀티쓰레드 환경에서 이 값이 써지게 되면 말이다. 따라서 이러한 문제점을 사전에 없애기 위해서는 스프링 빈은 항상 무상태(stateless)로 설계해야 한다. 이를 구현하고자 local변수, 파라미터, Threadlocal을 사용해야 한다. 또한 가급적 읽기만 가능해야 한다. 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다(의존적이면 안된다). Reference https://www.inflearn.com/course/lecture?courseSlug=%EC%8A%A4%ED%94%84%EB%A7%81-..
2023.09.29