2022. 8. 14. 18:09ㆍ프로그래밍/JAVA\Spring
@ComponentScan
@Component가 붙은 클래스를 컴포넌트 스캔의 대상이되 지정된 것들을 빈으로 등록해줌
@ComponentScan(excloudeFilter = @Filter(type = FilterType.AMMOTATION, classes = 클래스 이름.class))
해당 클래스를 제외하고 컴포넌트 등록됨
자동 의존관계주입
@Autowired
public class AutoAppConfigTest {
@Test
void basicScan(){
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class);
Memver Service memberService = ac.getBean(MemberService.class);
Assertions.assertThat() .....
}
}
@Autowired
기본 타입을 기준으로 자동으로 주입을 해줌ㅏ가
basePackages = "hello.coer.xxx"
해당 패키지에서 컴포넌트 스캔을 시작할수있음
basePackageClasses = AutoAppConfig.class
해당 클래스를 기준으로 스캔
지정하지 않으면 @ComponentScan이 붙은 클래스를 기준으로 하위의 모든 클래스를 스캔
설정정보 클래스의 위치ㅣ를 프로젝트 최상단에 두는 것
@SpringBootApplication
SpringBoot를 사용하며 이 최상위에 자동으로 생성되며 내부에 @ComponentScan
@Component
@Controller : 스프링 MVC 컨트롤러로 인식
@Service : 핵심 비지니스 로직이 있다는 인식 정도. 특별한 기능x
@Repositoriy : 스프링 데이터 접근 계층으로 인식하고 데이터 계층의 예외를 스프링 예외로 변환해준다.
@Configuration
이 사용된 클래스는 대상에 포함됨
애노테이션은 상속관계라는 것이 없다. 그래서 트정애노테이션이 특정 애노테이션을 들고있는것을 인식할 수 이쓴ㄴ 것은 자바 언어가 지원하는 기능이 아니고 스프링이 지원하는 기능이다.
필터
Annotation
class 생성
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyIncludeConponent{
}
test
@Test
void filterScan(){
ApplicationContext ac = new AnnotationcConfigApplicationContext(ComponentFilterAppConfig.class);
BeanA beanA = ac.getBean("beanA", BeanA.class);
assertThat(beanA).isNotNull();
assertThrows(
MoSuchBeanDefinitionExcepption.class,
() -> ac.getBean("beanB", BeanB.class);
)
}
@Configuration
@ComponentScan(
IncludeFilters = @Filter(classes = MyIncludeComponent.class),//해당 어노테이션은 스캔
excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = MyExcludeComponent.class)//스캔 제외
)
static class ComponentFilterAppConfig{
}
중복등록과 충돌
자동 빈 등록 vs 자동 빈 등록 - 오류발생
수동 빈 등록 vs 자동 빈 등록 - 수동빈이 우선권이 생김. 수동빈이 자동빈을 오버라이딩 해버린다.
최근에 springBoot에서 수동빈과 자동빈의 충돌이 발생할경우 오류가 나버림
협업에서 다양한 사람이 개발을 하기때문에 오류가 발생할경우 애매한 코드를 만들면 안됨!!!
명확한 개발을 해야한다!!!!
'프로그래밍 > JAVA\Spring' 카테고리의 다른 글
[Spring]Spring Boot 의 Ammotation과 간단 한줄요약 (0) | 2022.01.19 |
---|---|
[Spring] class 이름 중복으로 인한 오류 (0) | 2022.01.12 |
(JAVA)배열을 이용한 비행관리프로그램 (0) | 2020.06.30 |