tonykang22 / study

0 stars 0 forks source link

[Kotlin & Spring] 03. 스프링 부트 자동 설정 #123

Open tonykang22 opened 1 year ago

tonykang22 commented 1 year ago

스프링 부트 자동 설정

자동 설정이란



자동 설정 뜯어보기



... 
org.springframework.boot.autoconfigure.data.jdbc.JdbcRepositoriesAutoConfiguration
org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration
org.springframework.boot.autoconfigure.data.ldap.LdapRepositoriesAutoConfiguration
org.springframework.boot.autoconfigure.data.mongo.MongoDataAutoConfiguration
org.springframework.boot.autoconfigure.data.mongo.MongoReactiveDataAutoConfiguration
org.springframework.boot.autoconfigure.data.mongo.MongoReactiveRepositoriesAutoConfiguration
org.springframework.boot.autoconfigure.data.mongo.MongoRepositoriesAutoConfiguration
...

org.springframework.boot.autoconfigure.AutoConfiguration.imports 내부



@SpringBootConfiguration
@EnableAutoConfiguration(exclude=[JpaRepositoriesAutoConfiguration::class])
@ComponentScan(
    excludeFilters = [ComponentScan.Filter(
        type = FilterType.CUSTOM,
        classes = [TypeExcludeFilter::class]
  ), ComponentScan.Filter(type = FilterType.CUSTOM, classes = [AutoConfigurationExcludeFilter::class])]
)
// @SpringBootApplication //
class HelloWorldApplication



조건부 애노테이션

package org.springframework.context.annotation;

public @interface Conditional {

    Class<? extends Condition>[] value();

}

spring-context 모듈 내부의 Conditional 애노테이션



@Conditional(OnClassCondition.class)
public @interface ConditionalOnClass {}

@Conditional(OnPropertyCondition.class)
public @interface ConditionalOnProperty {}

autoconfigure 모듈 내부의 ConditionalOn으로 시작하는 애노테이션





@AutoConfiguration
@ConditionalOnProperty(prefix= = "spring.aop", name = "auto", havingValue = "true", matchIfMissing = true)
public class AopAutoConfiguration



spring.aop.auto=true