dependencies 추가시 필수로 reload 해줘야 적용됨 

dependencies {
    implementation('org.springframework.boot:spring-boot-starter-web')
    implementation('org.springframework:spring-jdbc')
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

 

implementation 추가 후 reload 하지 않으면 적용되지 않음

 

@Condotional 어노테이션이란 ?

컴포넌트의 Bean 등록 여부에 조건을 달 수 있게 해주는 어노테이션

 

스프링은 IOC컨테이너에 객체를 Bean으로 등록하여 사용하는데,

@Component로 선언된 클래스는 모두 Bean으로 등록되는데 여기에 조건부를 달 수 있다

ex. A경우에 등록을 하되, B경우에는 등록하지 않도록 설정 가능

 

Spring에서 추가기능의 설정파일을 읽고 해당되는 POJO에서 bean을 IOC컨테이너에 등록한다

이때 설절파일을 조건부로 읽는다면 필요할 때만 IOC컨테이너에 Bean 등록 가능하다

@Condotional 사용해야하는데 Condition 인터페이스의 구현체를 만들어야 한다

 

ex.

@Conditional(TomcatWebServerConfig.TomcatCondition.class)
public class TomcatWebServerConfig {
    @Bean("tomcatWebServerFactory")
    public ServletWebServerFactory servletWebServerFactory(){
        return new TomcatServletWebServerFactory();
    }

    static class TomcatCondition implements Condition {
        @Override
        public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
            return true;
        }
    }
}
@MyAutoConfiguration
@Conditional(JettyWebServerConfig.JettyCondition.class)
public class JettyWebServerConfig {
    // 톰캣과 두 개 이름이 동일할 경우 충동한다고 스프링 컨테이너가 초기화할 때 에러 발생 할 수 있으므로
    // 이름 구분해주기
    @Bean("JettyWebServerFactory")
    public ServletWebServerFactory servletWebServerFactory(){
        return new JettyServletWebServerFactory();
    }

    static public class JettyCondition implements Condition {
        @Override
        public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
            return false;
        }
    }
}

@Condition은 엘리먼트를 꼭 하나 등록해줘야하는데

그 엘리먼트 타입은 무조건 condition이라는 인터페이스를 구현한 클래스여야한다.

 

@Condition(xxxCondition.class)는 xxxCondition의 matches 메소드의 return값을 받아 컴포넌트 스캔 여부 판단

Boolean으로 return 해주면 되는데 true면 bean으로 등록 false면 IOC컨테이너에 Bean으로 등록되지 않는다

 

예시를 보면 Tomcat은 true를 반납하고 Jetty는 false를 반납하고 있으므로 Tomcat 서버가 실행된다.

 

 

 

이 외.

@SpringBootApplication : Component Scan 기능을 가지고 있음

@ComponentScan : 하위 디렉토리에 위치한 @Component로 명시된 Bean으로 등록하는 기능

@Configration : 이것 또한 @Component. 하위디렉토리에 설정 클래스를 위치시킨다

 

 

 

 

 

 

 

 

 

 

의존성 확인하는 방법

 

1. Terminal에서 확인

 

Terminal에서 스프링부트 프로젝트가 있는 경로로 이동

아래 명령어를 입력하여 의존  확인

 

./gradlew dependencies

 

 

2. 인텔리제이 IDEA에서 확인

 

인텔리제이 맨 우쯕 코끼리모양 아이콘(Gradle) 클릭하면 확인이 가능합니다.

Terminal 보다는 IDEA가 보기 편해 IDEA로 확인하는걸 추천

[오류내용]

프로젝트를 수행 중 test run해보니 아래와 같은 오류 발생

Unable to find a @SpringBootConfiguration, you need to use @ContextConfiguration or @SpringBootTest(classes=...) with your test

 

[오류해결]

@SpringBootTest(classes = HellobootApplication.class)

test 파일에 해당 java 파일 아래 해당 파일 경로 추가 해주면 오류 해결됨

+ Recent posts