반복적인 Spring Bean 등록에 지치셨나요? 당신은 혼자가 아닙니다!
Spring Boot에서 반복되는 Bean 정의로 인해 어려움을 겪은 적이 있습니까? 당신은 혼자가 아닙니다! 서로 다른 구성으로 동일한 클래스의 여러 Bean을 관리하는 것은 지루하고 복잡해질 수 있습니다. 다음과 같은 것이 필요하다고 가정해 보겠습니다.
@Bean MyService beanA() { // Set Configuration for bean A Configuration a = new... a.setUrl(.....) return new MyService(a); } @Bean MyService beanB() { // Set Configuration for bean A Configuration b = new... b.setUrl(.....) return new MyService(b); }
이 코드는 복잡하지 않지만 특히 동일한 유형의 여러 Bean을 처리할 때 빠르게 반복됩니다. 이상적으로는 중복된 코드 없이 고유한 설정으로 여러 인스턴스를 등록할 수 있는 방법이 있습니다.
이는 인터페이스 구현마다 고유한 Bean을 갖는 것과 다릅니다. 대신, 우리는 변형된 하나의 클래스를 설정하는 것에 대해 이야기하고 있습니다. 예를 들어 여러 데이터베이스(예: 고객, 보고, 백업)에 연결하는 앱을 생각해 보세요. 각 연결에는 고유한 구성이 필요하므로 복잡함 없이 관리하기가 어렵습니다. 다음과 같이 작성하게 될 수도 있습니다.
@Bean DatabaseService primaryDatabaseService() { return new DatabaseService("db-url-primary"); } @Bean DatabaseService reportDatabaseService() { return new DatabaseService("db-url-report"); }
더 간단한 솔루션을 사용하면 구성을 크게 간소화하고 애플리케이션 논리에 더 집중할 수 있습니다. MultiBeanConfig를 입력하세요. 동일한 Spring 빈에 대한 여러 구성을 관리하는 데 도움이 되도록 제가 만든 작은 라이브러리입니다.
MultiBeanConfig는 별도의 구성을 사용하여 Bean의 여러 인스턴스 설정을 단순화합니다. 이를 통해 다음을 수행할 수 있습니다.
pom.xml에 종속성을 포함합니다:
io.github.olufemithompson multibeanconfig 0.0.3
클래스를 @MultiBean으로 표시하여 여러 인스턴스에 적합하게 만드세요.
@MultiBean public class DatabaseService { // Your service logic }
속성 또는 YAML 파일에서 고유한 버전을 정의합니다.
multibean: primary-database-service: class: DatabaseService report-database-service: class: DatabaseService
기본 구성으로 PrimaryDatabaseService 및 ReportDatabaseService Bean을 등록합니다. MultiBeanConfig는 kebab-case에서 camelCase로 이름을 자동으로 변환합니다.
별도의 설정을 할당하려면 각 Bean의 구성에 속성을 직접 추가하세요. 다음은 각 인스턴스가 서로 다른 데이터베이스에 연결되는 예입니다.
@MultiBean public class DatabaseService { @Value("${database-config.connection-url}") private String connectionUrl; }
application.yml에서 각 인스턴스를 구성합니다:
database-config: connection-url: 'jdbc:h2:default-url' multibean: primary-database-service: class: DatabaseService database-config: connection-url: 'jdbc:mysql:primary-db-url' report-database-service: class: DatabaseService database-config: connection-url: 'jdbc:postgresql:report-db-url'
이 설정은 각 Bean에 고유한 연결 URL을 제공합니다. 공유 설정은 일반 섹션에서도 정의할 수 있으므로 구성이 효율적이고 중복이 줄어듭니다.
구성 주입을 위해 @Value에만 의존할 필요는 없습니다. Spring의 @ConfigurationProperties는 구성 클래스에 속성을 캡슐화하는 것을 허용합니다:
@ConfigurationProperties("database-config") @Configuration public class DatabaseConfig { private String connectionUrl; private int connectionTimeout; // Getters and Setters }
그런 다음 DatabaseConfig를 직접 삽입합니다.
@MultiBean public class DatabaseService { private final DatabaseConfig databaseConfig; public DatabaseService(DatabaseConfig databaseConfig) { this.databaseConfig = databaseConfig; } }
MultiBeanConfig를 사용하면 Spring 종속성과 마찬가지로 고유하게 구성된 Bean을 삽입할 수 있습니다.
@Service public class ApplicationService { private final DatabaseService primaryDatabaseService; private final DatabaseService reportDatabaseService; public ApplicationService(DatabaseService primaryDatabaseService, DatabaseService reportDatabaseService) { this.primaryDatabaseService = primaryDatabaseService; this.reportDatabaseService = reportDatabaseService; } }
MultiBeanConfig는 특히 기능 플래그, 데이터 소스 또는 개별 API 연결을 처리할 때 Spring Boot 애플리케이션에서 Bean 관리를 간소화합니다. 중복성을 줄이고 코드를 깨끗하게 유지하며 유지 관리성을 향상시킵니다. 한번 시도해 보시고 귀하의 프로젝트에 어떻게 적용되는지 알려주세요!
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3