Spring Boot 의 27 개 주해 [핵심]
Spring Boot 방식 의 프로젝트 개발 은 자바 응용 개발 분야 의 주류 구조 가 되 었 다. 이 는 생산 급 Spring 응용 프로그램 을 편리 하 게 만 들 수 있 을 뿐만 아니 라 현재 비교적 뜨 거 운 마이크로 서비스 프레임 워 크 인 SpringCloud 와 쉽게 통합 할 수 있다.
한편, Spring Boot 가 응용 프로그램의 구축 과 다른 프레임 워 크 와 신속하게 통합 되 는 것 을 쉽게 실현 할 수 있 는 이 유 는 가장 핵심 적 인 이 유 는 프로젝트 의 설정 을 크게 간소화 하고 '약속 이 설정 보다 크다' 는 원칙 을 최대 화 시 켰 기 때문이다.그러나 Spring Boot 를 바탕 으로 개발 에 큰 편 의 를 주 었 지만 사람들 로 하여 금 '구름 과 안개 속', 특히 각종 주 해 는 사람들 로 하여 금 '알 지만 그 이 유 를 모른다' 고 하 게 하기 쉽다.
따라서 Spring Boot 를 잘 사용 하려 면 그 가 제공 하 는 각종 기능 에 대한 주 해 를 전면적 이 고 명확 하 게 인식 하고 이해 해 야 한다.한편 으로 는 Spring Boot 기반 의 개발 효율 을 높 일 수 있 고, 다른 한편 으로 는 면접 에서 프레임 워 크 원 리 를 물 었 을 때 반드시 파악 해 야 할 지식 이기 도 하 다.다음 내용 에서 소 편 은 여러분 을 데 리 고 Spring Boot 의 상용 주 해 를 탐구 해 보 겠 습 니 다!
1, Spring 관련 6 개 주해
Spring Boot 의 일부 주해 도 Spring 의 주해 와 배합 하여 사용 해 야 한다. 여기 서 작은 편집 은 프로젝트 에서 Spring Boot 주해 와 가장 밀접 하 게 조 화 를 이 루 는 6 개의 Spring 기초 프레임 워 크 의 주 해 를 정리 했다.
1.1、@Configuration
Spring 3.0, @ Configuration 에서 설정 클래스 를 정의 하 는 데 사 용 됩 니 다. xml 설정 파일 을 교체 할 수 있 습 니 다. 주 해 된 클래스 내부 에는 하나 이상 의 @ Bean 주해 방법 이 포함 되 어 있 습 니 다. 이 방법 들 은 AnnotationConfigApplication Context 또는 AnnotationConfigWebApplication Context 류 에 의 해 스 캔 되 고 bean 정 의 를 구축 하여 Spring 용 기 를 초기 화 합 니 다.
@Configuration
public class TaskAutoConfiguration {
@Bean
@Profile("biz-electrfence-controller")
public BizElectrfenceControllerJob bizElectrfenceControllerJob() {
return new BizElectrfenceControllerJob();
}
@Bean
@Profile("biz-consume-1-datasync")
public BizBikeElectrFenceTradeSyncJob bizBikeElectrFenceTradeSyncJob() {
return new BizBikeElectrFenceTradeSyncJob();
}
}
1.2、@ComponentScan
웹 개발 을 한 학생 들 은 반드시 @ Controller, @ Service, @ Repository 주 해 를 사용 한 적 이 있 습 니 다. 소스 코드 를 보면 그들 중 에 공 통 된 주해 가 있 습 니 다. @ Component, 맞습니다. @ Component Scan 주 해 는 기본적으로 @ Controller, @ Service, @ Repository, @ Component 주해 의 종 류 를 spring 용기 에 설치 합 니 다.
@ComponentScan(value = "com.gqz.check.api")
public class CheckApiApplication {
public static void main(String[] args) {
SpringApplication.run(CheckApiApplication.class, args);
}
}
@ SpringBootApplication 주해 에 도 @ Componentscan 주해 가 포함 되 어 있 기 때문에 사용 중 에 도 @ SpringBootApplication 주해 의 scanBasePackages 속성 을 통 해 설정 할 수 있 습 니 다.
@SpringBootApplication(scanBasePackages = {"com.gqz.check.api", "com.gqz.check.service"})
public class CheckApiApplication {
public static void main(String[] args) {
SpringApplication.run(CheckApiApplication.class, args);
}
}
1.3、@Conditional
@Conditional 은 Spring 4 에서 새로 제공 한 주해 입 니 다. @ Conditional 주 해 를 통 해 코드 에 설 정 된 조건 에 따라 서로 다른 bean 을 불 러 올 수 있 습 니 다. 조건 주 해 를 설정 하기 전에 불 러 온 bean 류 를 Condition 인 터 페 이 스 를 실현 한 다음 에 인터페이스의 클래스 설정 을 불 러 올 지 여 부 를 설정 해 야 합 니 다.
Spring Boot 주해 의 @ ConditionalOnProperty, @ ConditionalOnBean 등 @ Conditional * 로 시작 하 는 주 해 는 모두 @ Conditional 을 통합 하여 해당 기능 을 실현 합 니 다.
1.4、@Import
가 져 오 는 방식 으로 인 스 턴 스 를 springIOC 용기 에 넣 습 니 다.필요 할 때 Spring 용기 에 관리 되 지 않 은 클래스 를 Spring 용기 에 가 져 올 수 있 습 니 다.
//
public class Square { }
public class Circular {}
//
@Import({Square.class,Circular.class})
@Configuration
public class MainConfig{ }
1.5、@ImportResource
@ Import 와 유사 합 니 다. 차이 점 은 @ ImportResource 가 가 져 온 것 은 설정 파일 입 니 다.
// xml
@ImportResource("classpath:spring-redis.xml")
public class CheckApiApplication {
public static void main(String[] args) {
SpringApplication.run(CheckApiApplication.class, args);
}
}
1.6、@Component
@Component 는 원 주해 로 다른 종류의 주 해 를 주석 할 수 있다 는 뜻 이다.
예 를 들 어 @ Controller @ Service @ Repository.이 주 해 를 가 진 클래스 는 구성 요소 로 간주 되 며, 주 해 를 기반 으로 한 설정 과 클래스 경 로 를 스 캔 할 때 이 클래스 는 실례 화 됩 니 다.다른 클래스 의 주 해 는 @ Controller 와 같은 특수 한 유형의 구성 요소 로 인 정 될 수 있 습 니 다. 컨트롤 러 (주입 서비스), @ Service 서비스 (주입 dao), @ Repository dao (dao 접근 실현). @Component 는 구성 요 소 를 말 합 니 다. 구성 요소 가 분류 하기 어 려 울 때 이 주 해 를 사용 하여 표시 할 수 있 습 니 다. 역할 은 XML 설정 에 해당 합 니 다.
2. Spring Boot 의 가장 핵심 적 인 21 개의 주석
Spring Boot 와 밀접 한 관 계 를 가 진 Spring 기초 주 해 를 마치 고 Spring Boot 가 제공 하 는 핵심 주해 의 내용 을 살 펴 보 겠 습 니 다!
2.1、@SpringBootApplication
이 주 해 는 Spring Boot 의 가장 핵심 적 인 주해 로 Spring Boot 의 주요 유형 에 사용 되 며, 표 지 는 Spring Boot 응용 으로 Spring Boot 를 여 는 각종 능력 입 니 다.실제로 이 주 해 는 @ Configuration, @ EnableAutoConfiguration, @ Componentscan 세 개의 주 해 를 조합 한 것 입 니 다.이러한 주 해 는 일반적으로 함께 사용 되 기 때문에 Spring Boot 는 통 일 된 주 해 를 제공 합 니 다 @ SpringBootApplication.
@SpringBootApplication(exclude = {
MongoAutoConfiguration.class,
MongoDataAutoConfiguration.class,
DataSourceAutoConfiguration.class,
ValidationAutoConfiguration.class,
MybatisAutoConfiguration.class,
MailSenderAutoConfiguration.class,
})
public class API {
public static void main(String[] args) {
SpringApplication.run(API.class, args);
}
}
2.2、@EnableAutoConfiguration
Spring Boot 에서 자동 으로 주 해 를 설정 할 수 있 도록 합 니 다. 이 주 해 를 열 면 Spring Boot 는 현재 클래스 경로 의 가방 이나 클래스 에 따라 Spring Bean 을 설정 할 수 있 습 니 다.
예 를 들 어 현재 클래스 경로 에 Mybatis 라 는 JAR 패키지 가 있 습 니 다. Mybatis AutoConfiguration 주 해 는 관련 매개 변수 에 따라 Mybatis 의 각 Spring Bean 을 설정 할 수 있 습 니 다.
@EnableAutoConfiguration 실현 의 관건 은 AutoConfiguration ImportSelector 를 도입 하 는 것 입 니 다. 그 핵심 논 리 는 selectImports 방법 입 니 다. 논 리 는 대체적으로 다음 과 같 습 니 다.
-설정 파일 META - INF / spring. factories 에서 사용 할 수 있 는 모든 자동 설정 클래스 를 불 러 옵 니 다.
-무 거 운 것 을 제거 하고 exclude 와 excludeName 속성 이 지 니 고 있 는 클래스 를 제거 합 니 다.
-필터, 조건 (@ conditional) 을 만족 시 키 는 자동 설정 클래스 를 되 돌려 줍 니 다.
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@AutoConfigurationPackage
// AutoConfigurationImportSelector
@Import({EnableAutoConfigurationImportSelector.class})
public @interface EnableAutoConfiguration {
String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
Class>[] exclude() default {};
String[] excludeName() default {};
}
2.3、@SpringBootConfiguration
이 주 해 는 @ Configuration 주해 의 변형 입 니 다. Spring Boot 설정 을 수식 하거나 Spring Boot 의 후속 확장 에 유리 합 니 다.
2.4、@ConditionalOnBean
@Condition alOnBean (A. class) 은 현재 컨 텍스트 에 A 대상 이 존재 할 때 만 하나의 Bean 을 예화 합 니 다. 즉, A. class 가 spring 의 applicationContext 에 존재 할 때 만 현재 bean 을 만 들 수 있 습 니 다.
@Bean
// DefaultMQProducer , RocketMQProducerLifecycle Bean
@ConditionalOnBean(DefaultMQProducer.class)
public RocketMQProducerLifecycle rocketMQLifecycle() {
return new RocketMQProducerLifecycle();
}
2.5、@ConditionalOnMissingBean
@ conditional 주 해 를 조합 합 니 다. @ conditional OnBean 주해 와 달리 현재 컨 텍스트 에 A 대상 이 존재 하지 않 을 때 만 Bean 을 예화 합 니 다.
@Bean
// RocketMQProducer , RocketMQProducer Bean
@ConditionalOnMissingBean(RocketMQProducer.class)
public RocketMQProducer mqProducer() {
return new RocketMQProducer();
}
2.6、@ConditionalOnClass
그룹 @ Conditional 주 해 는 클래스 path 에 존재 할 때 만 빈 을 만 들 수 있 습 니 다.
@Bean
// classpath HealthIndicator , HealthIndicator Bean
@ConditionalOnClass(HealthIndicator.class)
public HealthIndicator rocketMQProducerHealthIndicator(Map producers) {
if (producers.size() == 1) {
return new RocketMQProducerHealthIndicator(producers.values().iterator().next());
}
}
2.7、@ConditionalOnMissingClass
@ conditional 주 해 를 조합 합 니 다. @ conditional OnMissingClass 주해 와 달리 classpath 에 지정 한 Class 가 없어 야 설정 을 시작 합 니 다.
2.8、@ConditionalOnWebApplication
@ Conditional 주 해 를 조합 하면 현재 항목 유형 은 WEB 항목 이 어야 설정 을 시작 합 니 다.현재 항목 은 다음 과 같은 세 가지 유형 이 있 습 니 다. ANY (모든 웹 항목 이 일치 합 니 다), SERVLET (기본 적 인 Servelet 항목 만 일치 합 니 다), REACTIVE (응답 기반 웹 프로그램 만 일치 합 니 다).
2.9、@ConditionalOnNotWebApplication
@ conditional 주 해 를 조합 합 니 다. @ conditional OnWebApplication 주해 와 달리 현재 프로젝트 유형 은 WEB 프로젝트 가 아니 어서 설정 을 시작 합 니 다.
2.10、@ConditionalOnProperty
@ Conditional 주 해 를 조합 하여 지정 한 속성 이 지정 한 값 이 있 을 때 만 설정 을 시작 합 니 다.구체 적 인 작업 은 두 개의 속성 name 과 havingValue 를 통 해 이 루어 집 니 다. 그 중에서 name 은 application. properties 에서 특정한 속성 값 을 읽 고 이 값 이 비어 있 으 면 false 로 돌아 갑 니 다.값 이 비어 있 지 않 으 면 이 값 을 havingValue 가 지정 한 값 과 비교 하고 같 으 면 true 로 되 돌려 줍 니 다.그렇지 않 으 면 false 로 돌아 갑 니 다.반환 값 이 false 이면 이 configuration 은 유효 하지 않 습 니 다.true 이면 유효 합 니 다.
@Bean
// rocketmq.producer.enabled true
@ConditionalOnProperty(value = "rocketmq.producer.enabled", havingValue = "true", matchIfMissing = true)
public RocketMQProducer mqProducer() {
return new RocketMQProducer();
}
2.11、@ConditionalOnExpression
@ conditional 주 해 를 조합 하여 SpEL 표현 식 이 true 일 때 만 설정 을 시작 합 니 다.
@Configuration
@ConditionalOnExpression("${enabled:false}")
public class BigpipeConfiguration {
@Bean
public OrderMessageMonitor orderMessageMonitor(ConfigContext configContext) {
return new OrderMessageMonitor(configContext);
}
}
2.12、@ConditionalOnJava
@ Conditional 주 해 를 조합 하여 실행 중인 자바 JVM 이 지정 한 버 전 범위 에 있 을 때 만 설정 을 시작 합 니 다.
2.13、@ConditionalOnResource
@ Conditional 주 해 를 조합 하면 클래스 경로 에 지정 한 자원 이 있어 야 설정 을 시작 합 니 다.
@Bean
@ConditionalOnResource(resources="classpath:shiro.ini")
protected Realm iniClasspathRealm(){
return new Realm();
}
2.14、@ConditionalOnJndi
@ Conditional 주 해 를 조합 하여 지정 한 JNDI 가 존재 할 때 만 설정 을 엽 니 다.
2.15、@ConditionalOnCloudPlatform
@ Conditional 주 해 를 조합 하여 지정 한 클 라 우 드 플랫폼 이 활성화 되 었 을 때 설정 을 시작 합 니 다.
2.16、@ConditionalOnSingleCandidate
@ conditional 주 해 를 조합 합 니 다. 지정 한 class 가 용기 에 빈 이 하나 있 거나 여러 개 있 지만 첫 번 째 로 선택 할 때 만 설정 을 엽 니 다.
2.17、@ConfigurationProperties
Spring Boot 는 주석 을 사용 하여 사용자 정의 properties 파일 을 실체 bean 에 표시 할 수 있 습 니 다. 예 를 들 어 config. properties 파일 입 니 다.
@Data
@ConfigurationProperties("rocketmq.consumer")
public class RocketMQConsumerProperties extends RocketMQProperties {
private boolean enabled = true;
private String consumerGroup;
private MessageModel messageModel = MessageModel.CLUSTERING;
private ConsumeFromWhere consumeFromWhere = onsumeFromWhere.CONSUME_FROM_LAST_OFFSET;
private int consumeThreadMin = 20;
private int consumeThreadMax = 64;
private int consumeConcurrentlyMaxSpan = 2000;
private int pullThresholdForQueue = 1000;
private int pullInterval = 0;
private int consumeMessageBatchMaxSize = 1;
private int pullBatchSize = 32;
}
2.18、@EnableConfigurationProperties
@ EnableConfigurationProperties 주해 가 @ Configuration 에 적 용 될 때 @ ConfigurationProperties 에 주 해 된 beans 는 자동 으로 Environment 속성 으로 설 정 됩 니 다.이런 스타일 의 설정 은 SpringApplication 의 외부 YAML 설정 과 함께 사용 하기에 특히 적합 하 다.
@Configuration
@EnableConfigurationProperties({
RocketMQProducerProperties.class,
RocketMQConsumerProperties.class,
})
@AutoConfigureOrder
public class RocketMQAutoConfiguration {
@Value("${spring.application.name}")
private String applicationName;
}
2.19、@AutoConfigureAfter
자동 설정 클래스 에 사용 하면 이 자동 설정 클래스 는 다른 자동 설정 클래스 가 설 정 된 후에 사용 해 야 한 다 는 것 을 표시 합 니 다.
Mybatis 의 자동 설정 클래스 와 같이 데이터 원본 자동 설정 클래스 뒤에 있어 야 합 니 다.
@AutoConfigureAfter(DataSourceAutoConfiguration.class)
public class MybatisAutoConfiguration {
}
2.20、@AutoConfigureBefore
이것 은 @ AutoConfigure After 주석 과 반대로 이 자동 설정 클래스 는 다른 자동 설정 클래스 설정 전에 필요 합 니 다.
2.21、@AutoConfigureOrder
Spring Boot 1.3.0 에 새 주석 @ AutoConfigureOrder 가 있 습 니 다. 불 러 오 는 우선 순 위 를 설정 하 는 데 사 용 됩 니 다.
@AutoConfigureOrder(Ordered.HIGHEST_PRECEDENCE) //
@Configuration
@ConditionalOnWebApplication // web
@Import(BeanPostProcessorsRegistrar.class) //
public class EmbeddedServletContainerAutoConfiguration {
@Configuration
@ConditionalOnClass({ Servlet.class, Tomcat.class })
@ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT)
public static class EmbeddedTomcat {
// ...
}
@Configuration
@ConditionalOnClass({ Servlet.class, Server.class, Loader.class, WebAppContext.class })
@ConditionalOnMissingBean(value = EmbeddedServletContainerFactory.class, search = SearchStrategy.CURRENT)
public static class EmbeddedJetty {
// ...
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.