728x90
반응형
Starter 와 AutoConfigure
프로젝트 생성
- 자동설정 프로젝트의 경우 일반적으로
xxx-spring-boot-autoconfigure
에 구성 - 의존성 정의 관련 프로젝트의 경우 일반적으로
xxx-spring-boot-starter
에 구성 - 하나로 만들 경우
xxx-spring-boot-starter
에 같이 구성
// pom.xml
<groupId>me.jsk</groupId>
<artifactId>jinseo-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
구현 방법
1. 의존성 추가
//pom.xml
...
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure-processor</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.0.3.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2. Holoman.java
, HolomanConfiguration.java
생성
// Holoman.java
public class Holoman {
String name;
int howLong;
getter/setter
toString
}
// HolomanConfiguration.java
@Configuration
public class HolomanConfiguration {
@Bean
public Holoman holoman() {
Holoman holoman = new Holoman();
holoman.setHowLong(5);
holoman.setName("Jinseo");
return holoman;
}
}
3. src/main/resource/META-INF
에 spring.factories
생성 및 자동 설정파일 추가
// spring.factories
#Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
me.jsk.HolomanConfiguration
4. Maven install
5. EduApplication Project
에 의존성 추가
// pom.xml
<dependency>
<groupId>me.jsk</groupId>
<artifactId>jinseo-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
6. HolomanRunner.java
생성
// HolomanRunner.java
@Component
public class HolomanRunner {
@Autowired
Holoman holoman;
@Override
public void run(ApplicationArguments args) throws Exception {
System.out.println(holoman);
}
}
* 주의 사항
pom.xml
의 <parent>
내 spring-boot-starter
버전과 dependencyManagement
내 dependencies
버전 일치시켜야 Maven install
오류가 발생하지 않는다.
Bean 등록 순서 확인
// Application.java
@SpringBootApplication
public class Application {
public static void main(String[] args) {
// SpringApplication.run(Application.class, args);
SpringApplication application = new SpringApplication(Application.class);
// Application 이 WebApplication 으로 작동하지 않도록 하는 옵션
application.setWebApplicationType(WebApplicationType.NONE);
application.run(args);
}
@Bean
public Holoman holoman() {
Holoman holoman = new Holoman();
holoman.setName("dev_jsk");
holoman.setHowLong(100);
return holoman;
}
}
위 코드 동작 시 결과는 Holoman{name='Jinseo', howLong=5}
가 나타난다. @Bean
등록 시 @ComponentScan
과 @EnableAutoConfiguration
이 사용되어 등록하게 되는데 @ComponentScan
이 먼저 동작하여 Holoman{name='dev_jsk', howLong=100}
을 Bean으로 등록하고 @EnableAutoConfiguration
이 나중에 동작하여 자동설정 Bean을 덮어 씌우기 때문에 위와 같은 결과가 발생한다.
728x90
반응형
'Dev > Spring Boot' 카테고리의 다른 글
[스프링 부트 개념과 활용] 내장 웹 서버 이해 (0) | 2020.08.19 |
---|---|
[스프링 부트 개념과 활용] 자동 설정 만들기 2부 (0) | 2020.08.19 |
[스프링 부트 개념과 활용] 자동 설정 이해 (0) | 2020.08.18 |
[스프링 부트 개념과 활용] 의존성 관리 응용 (0) | 2020.08.18 |
[스프링 부트 개념과 활용] 의존성 관리 이해 (0) | 2020.08.18 |
댓글