<dependencies>
<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.5.3</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
ex. @Bean으로 등록할 class 파일 - Holoman.java
public class Holoman {
private String name;
private int howLong;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHowLong() {
return howLong;
}
public void setHowLong(int howLong) {
this.howLong = howLong;
}
@Override
public String toString() {
return "Holoman{" +
"name='" + name + '\'' +
", howLong=" + howLong +
'}';
}
}
ex. @Configuration 파일 - HolomanConfiguration.java
@Configuration
public class HolomanConfiguration {
@Bean
public Holoman holoman(){
Holoman holoman = new Holoman();
holoman.setHowLong(26);
holoman.setName("linger0310");
return holoman;
}
}
src/main/resource/META-INF에 spring.factories 파일 만들기
spring.factories 에 아래의 코드를 추가한다.
Key : org.springframework.boot.autoconfigure.EnableAutoConfiguration
Values : 패키지 이름.생성한 Configuration 파일 이름들
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
패키지 이름.생성한 Configuration 파일 이름
이러한 과정으로 등록시킨 Bean은 타 프로젝트에서 의존성 추가를 해주면 사용가능하다.
Bean과 Bean Config를 정의한 starter-and-autoconfigure 프로젝트
init이라는 타 프로젝트에서 starter-and-autoconfigure 프로젝트의 의존성을 추가
External Libraries에 추가된 것을 확인
EnableAutoConfiguration로 가져온 Bean을 가져와서 이를 적절히 재정의 후
사용하려고 하면 재정의가 반영되지 않고 초기 가져온 설정이 반영될 수가 있다.
방법1. @ConditionalOnMissingBean
ex
@Configuration
public class HolomanConfiguration {
@Bean
@ConditionalOnMissingBean
public Holoman holoman(){
Holoman holoman = new Holoman();
holoman.setHowLong(26);
holoman.setName("linger0310");
return holoman;
}
}
방법2. @ConfigurationProperties로 좀 더 깔끔히 처리하기.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
ex
@ConfigurationProperties("holoman (application.properties에서 사용할 이름)")
public class HolomanProperties {
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getHowLong() {
return howLong;
}
public void setHowLong(int howLong) {
this.howLong = howLong;
}
private String name;
private int howLong;
}
ex
holoman.name = cyj
holoman.how-long = 100
ex
@Configuration
@EnableConfigurationProperties(HolomanProperties.class)
public class HolomanConfiguration {
@Bean
@ConditionalOnMissingBean
public Holoman holoman(HolomanProperties properties){
Holoman holoman = new Holoman();
holoman.setHowLong(properties.getHowLong());
holoman.setName(properties.getName());
return holoman;
}
}
방법1이든, 방법2이든 최종적으로는 Bean에 대하여 mvn install을 해줘야 변경 결과 반영됨..