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 |
댓글