рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди - рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдЯрд╛рдбреЗрдЯрд╛

@ConfigurationProperties рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ @ConfigurationProperties рд╕рд╛рде рдЕрдкрдиреЗ рдЖрд╡реЗрджрди рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдирд╛ред

рд▓реЗрдЦ рдореЗрдВ

  • рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдирдкреНрд░реЛрдкрд░реЗрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ application.properties рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╕реЗрдЯ рдХрд░рдирд╛ рдФрд░ рдмрджрд▓рдирд╛
  • IDE рдХреЗ рд╕рд╛рде Application.properties рдХреЛ рдПрдХреАрдХреГрдд рдХрд░рдирд╛
  • рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛

рдЫрд╡рд┐

рджреЛ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдпрд╣рд╛рдВ рд╡рд░реНрдгрд┐рдд рд╣реИрдВ - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдирдкреНрд░реЛрдкрд░реЗрдЯреА рдмрдирд╛рдоред рдореВрд▓реНрдп
рдКрдкрд░ рдХреА рддрд╕реНрд╡реАрд░ рдореЗрдВ, рдСрдкрд░реЗрд╢рди рдХреА рдореБрдЦреНрдп рд░рдЪрдирд╛ рдФрд░ рд╕рд┐рджреНрдзрд╛рдВрддред рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдЙрдкрд▓рдмреНрдз рдШрдЯрдХ, рдпреЗ рд╕реНрдкреНрд░рд┐рдВрдЧ рдХрдВрдкреЛрдиреЗрдВрдЯреНрд╕ рд╣реИрдВ, рдмрд╕ рдХрдХреНрд╖рд╛рдПрдВ, рд╡рд┐рднрд┐рдиреНрди рд╕реНрдерд┐рд░рд╛рдВрдХ, рдЪрд░ рдЗрддреНрдпрд╛рджрд┐ рдХреЛ рдПрдкреНрд▓реАрдХреЗрд╢рди.рдкреНрд░реЙрдкрд░реЗрдЯреА рдлрд╛рдЗрд▓ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЙрд╕ рд╕рдордп рднреА рдЬрдм рд╡рд┐рдХрд╛рд╕ рдХрд╛ рд╡рд╛рддрд╛рд╡рд░рдг рдЗрд╕реЗ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╡рд┐рдХрд▓реНрдк рдХреА рдкреЗрд╢рдХрд╢ рдХреА рдЬрд╛рдПрдЧреА, рдЪреЗрдХ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗред рдЬрдм рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рд╕рдВрдХреЗрддрд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рдХрд╛рд░, рдкреНрд░рддрд┐рдмрдВрдзреЛрдВ рдХреЗ рдЕрдиреБрдкрд╛рд▓рди рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдпрджрд┐ рд╕рдм рдХреБрдЫ рд╕рдВрддреЛрд╖рдЬрдирдХ рд╣реИ, рддреЛ рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЙрдкрд▓рдмреНрдз рд╕реНрдкреНрд░рд┐рдВрдЧ рдШрдЯрдХреЛрдВ рдХреА рд╕реВрдЪреА рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдиреАрдЪреЗ рдореИрдВ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдХреИрд╕реЗред
рд╕рдВрдкрддреНрддрд┐ рд╡рд░реНрдЧ

рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдирдкреНрд░реЛрдкреНрд░реЗрдЯреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрдЯрд┐рдВрдЧ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рд╕рдВрдкрддреНрддрд┐ рд╡рд░реНрдЧ рд╕реЗ рд╢реБрд░реВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧреБрдгреЛрдВ, рд╕рд┐рд╕реНрдЯрдо рдШрдЯрдХреЛрдВ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рд╣рдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

AppProperties.java
 @ConfigurationProperties(prefix = "demo") @Validated public class AppProperties { private String vehicle; @Max(value = 999, message = "Value 'Property' should not be greater than 999") private Integer value; private Map<String,Integer> contexts; private StrategyEnum strategyEnum; private Resource resource; private DemoService service; public String getVehicle() { return vehicle; } public void setVehicle(String vehicle) { this.vehicle = vehicle; } public Map<String, Integer> getContexts() { return contexts; } public void setContexts(Map<String, Integer> contexts) { this.contexts = contexts; } public StrategyEnum getStrategyEnum() { return strategyEnum; } public void setStrategyEnum(StrategyEnum strategyEnum) { this.strategyEnum = strategyEnum; } public Resource getResource() { return resource; } public void setResource(Resource resource) { this.resource = resource; } public DemoService getService() { return service; } public void setService(DemoService service) { this.service = service; } public Integer getValue() { return value; } public void setValue(Integer value) { this.value = value; } @Override public String toString() { return "MyAppProperties{" + "\nvehicle=" + vehicle + "\n,contexts=" + contexts + "\n,service=" + service + "\n,value=" + value + "\n,strategyEnum=" + strategyEnum + '}'; } } 


рд╡рд░реНрдЧ рдЙрдкрд╕рд░реНрдЧ рдореЗрдВ = "рдбреЗрдореЛ" рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рдВрдкрддреНрддрд┐ рдореЗрдВ рдПрдХ рдЙрдкрд╕рд░реНрдЧ рдХреЗ рд░реВрдк рдореЗрдВред

SpringApplication рдЖрд╡реЗрджрди рд╡рд░реНрдЧ рдФрд░ рдкрд░рд┐рдпреЛрдЬрдирд╛ pom.xml
 @SpringBootApplication @EnableConfigurationProperties({AppProperties.class}) @ImportResource(value= "classpath:context.xml") public class DemoConfigProcessorApplication { public static void main(String[] args) { ConfigurableApplicationContext context = SpringApplication.run(DemoConfigProcessorApplication.class, args); AppProperties properties = context.getBean(AppProperties.class); String perform = properties.getService().perform(properties.getVehicle()); System.out.println("perform: " + perform); System.out.println(properties.toString()); } } 

 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.example</groupId> <artifactId>demoConfigProcessor</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>demoConfigProcessor</name> <description>Demo project for Spring Boot Configuration Processor</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.0.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-validation</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-configuration-processor</artifactId> <optional>true</optional> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>com.jayway.jsonpath</groupId> <artifactId>json-path</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project> 


рдлрд┐рд░ рдореИрдВрдиреЗ рджреЛ рд╡рд╕рдВрдд рдбрд┐рдмреНрдмреЗ рдШреЛрд╖рд┐рдд рдХрд┐рдП

рд╡рд╕рдВрдд рд╕рдВрджрд░реНрдн (рд╕рдВрджрд░реНрднред xml)
 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="service1" class="com.example.demoConfigProcessor.MyDemoService1"> <description>Description MyDemoService 1</description> </bean> <bean id="service2" class="com.example.demoConfigProcessor.MyDemoService2"> <description>Description MyDemoService 2</description> </bean> </beans> 


AppProperties рд╡рд░реНрдЧ рдореЗрдВ, рдореИрдВрдиреЗ рдХреБрдЫ рдЙрдкрд▓рдмреНрдз рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рдХрд╛ рд╕рдВрдХреЗрдд рджрд┐рдпрд╛, рдореИрдВ рдЗрд╕реЗ application.properties рдореЗрдВ рдмрджрд▓ рджреВрдВрдЧрд╛, рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рджреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реЛрдВрдЧреЗ рдФрд░ рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ application.properties рдореЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░реВрдВрдЧрд╛ред

рдЫрд╡рд┐

рдпрд╣рд╛рдБ рдЙрдирдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИ

DemoService
 public interface DemoService { String perform(String value); } 

 public class MyDemoService1 implements DemoService { @Override public String perform(String value) { return "Service тДЦ1: perform routine maintenance work on <" + value +">"; } } 

 public class MyDemoService2 implements DemoService { @Override public String perform(String value) { return "Service тДЦ2: perform routine maintenance work on <" + value +">"; } } 


рдпрд╣ рдЕрдм application.properties рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рднреА рд╡рд┐рдиреНрдпрд╛рд╕рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рд╡рд░реНрдЧ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЛ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдлрд╛рдЗрд▓ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИ
\target\classes\META-INF\spring-configuration-metadata.json ред рджрд░рдЕрд╕рд▓, рдЗрд╕рдХрд╛ IDE Application.properties рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╕рдВрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдореИрдВ рд╕рд╛рдордЧреНрд░реА рдореЗрдВ рд▓рд┐рдВрдХ рдореЗрдВ рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╕рдВрдХреЗрдд рджреВрдВрдЧрд╛ред рдпрд╣ рдлрд╝рд╛рдЗрд▓ AppProperties рд╡рд░реНрдЧ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдмрдирд╛рдИ рдЬрд╛рдПрдЧреАред рдпрджрд┐ рдЖрдк рдЕрдм application.properties рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓рддреЗ рд╣реИрдВ рдФрд░ "рдбреЗрдореЛ" рд▓рд┐рдЦрдирд╛ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╡рд╛рддрд╛рд╡рд░рдг рдЙрдкрд▓рдмреНрдз рдЧреБрдгреЛрдВ рдХреЛ рджрд┐рдЦрд╛рдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрдЧрд╛

рдЫрд╡рд┐

рдпрджрд┐ рдЖрдк рдЧрд▓рдд рдкреНрд░рдХрд╛рд░ рджрд░реНрдЬ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдИрдбреАрдИ рд░рд┐рдкреЛрд░реНрдЯ рдХрд░реЗрдЧрд╛

рдЫрд╡рд┐

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдЗрд╕реЗ рдЫреЛрдбрд╝ рджреЗрдВ рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рд╣реИ рдФрд░ рдЖрд╡реЗрджрди рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ, рддреЛ рдПрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреА

рдЫрд╡рд┐
рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдирд╛

рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдЯрд╛рдбреЗрдЯрд╛, рдпрд╣ рдХреЗрд╡рд▓ IDE рдореЗрдВ application.properties рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рд╣реИ, рдпрджрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИ, рддреЛ рдЖрдк рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдкрд░реНрдпрд╛рд╡рд░рдг рдХреЗ рд▓рд┐рдП рд╕рдВрдХреЗрдд рдФрд░ рдЕрдиреНрдп рдЬрд╛рдирдХрд╛рд░реА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрдирд╛рдИ рдЧрдИ рд╕реНрдкреНрд░рд┐рдВрдЧ-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди-рдореЗрдЯрд╛рдбреЗрдЯрд╛.json рдлрд╝рд╛рдЗрд▓ рдХреЛ \src\main\resources\META-INF\ рдХреЙрдкреА рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдирд╛рдо рдмрджрд▓реЗрдВ
additional-spring-configuration-metadata.json ред рдЗрд╕ рдлрд╝рд╛рдЗрд▓ рдореЗрдВ, рдореИрдВ рдХреЗрд╡рд▓ рд╕рдВрдХреЗрдд рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд▓реВрдВрдЧрд╛: []

рдЗрд╕рдореЗрдВ рдпрд╣ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЗрдореЛ рдХреЗ рд▓рд┐рдП рдорд╛рдиреНрдп рдорд╛рдиред рд╡реЗрд▓

 "hints": [ { "name": "demo.vehicle", "values": [ { "value": "car make A", "description": "Car brand A is allowed." }, { "value": "car make B", "description": "Car brand B is allowed." } ] }] 

"рдирд╛рдо" рдлрд╝реАрд▓реНрдб рдореЗрдВ, рд╕рдВрдкрддреНрддрд┐ "рдбреЗрдореЛ.рд╡реНрд╣реАрд▓" рдЗрдВрдЧрд┐рдд рдХреА рдЧрдИ рд╣реИ, рдФрд░ "рдореВрд▓реНрдпреЛрдВ" рдореЗрдВ рдорд╛рдиреНрдп рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рд╣реИред рдЕрдм рдЕрдЧрд░ рдореИрдВ рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реВрдВ рдФрд░ рдЖрд╡реЗрджрди.рдкреНрд░рджрд╛рдп рдлрд╛рдЗрд▓ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реВрдВ, рддреЛ рдЬрдм рдореИрдВ рдбреЗрдореЛ рджрд░реНрдЬ рдХрд░рддрд╛ рд╣реВрдВред рддреЛ рдореБрдЭреЗ рдорд╛рдиреНрдп рдорд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рдорд┐рд▓ рдЬрд╛рддреА рд╣реИ

рдЫрд╡рд┐

рдЬрдм рдЖрдк рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд рдПрдХ рд╕реЗ рдПрдХ рдЕрд▓рдЧ рдкреНрд░рдХрд╛рд░ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХрд╛, рд╕рдВрдкрд╛рджрдХ рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд░реЗрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрд╡реЗрджрди рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╕рдЦреНрдд рдкреНрд░рддрд┐рдмрдВрдз рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рдПрдХ рд╕рдВрдХреЗрдд рд╣реИред

рдЫрд╡рд┐

рдкрд╣рд▓реЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ, рдореИрдВрдиреЗ рджреЛ рд╕реЗрд╡рд╛рдУрдВ рдХреА рдШреЛрд╖рдгрд╛ рдХреА MyDemoService1 рдФрд░ MyDemoService2, рдЙрди рджреЛрдиреЛрдВ рдиреЗ DemoService рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ, рдЕрдм рдпрд╣ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рддрд╛рдХрд┐ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╡рд╛рд▓реА рдХреЗрд╡рд▓ рд╕реЗрд╡рд╛рдПрдБ Application.properties рддрдХ рдкрд╣реБрдБрдЪ рд╕рдХреЗрдВ рдФрд░ рддрджрдиреБрд╕рд╛рд░, рдЪрдпрдирд┐рдд рд╡рд░реНрдЧ рдХреЛ AppProperties рд╡рд░реНрдЧ рдореЗрдВ рдЖрд░рдВрднреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рджрд╛рддрд╛ рд╣реИрдВ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдЕрддрд┐рд░рд┐рдХреНрдд-рд╕реНрдкреНрд░рд┐рдВрдЧ-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди-рдореЗрдЯрд╛рдбреЗрдЯрд╛ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреНрд░рджрд╛рддрд╛ рд╣реИрдВ рдЬреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдкрд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдореИрдВ рдПрдХ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдЦрд╛рдКрдВрдЧрд╛, spring-bean-reference ред рдпрд╣ рдкреНрд░рдХрд╛рд░ рд╡рд░реНрддрдорд╛рди рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдЙрдкрд▓рдмреНрдз рдлрд▓рд┐рдпреЛрдВ рдХреЗ рдирд╛рдо рджрд┐рдЦрд╛рддрд╛ рд╣реИред рд╕реВрдЪреА рдЖрдзрд╛рд░ рд╡рд░реНрдЧ рдпрд╛ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рддрдХ рд╕реАрдорд┐рдд рд╣реИред

рдбреЗрдореЛ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рддрд╛ рдЙрджрд╛рд╣рд░рдг:

  "hints": [ { "name": "demo.service", "providers": [ { "name": "spring-bean-reference", "parameters": { "target": "com.example.demoConfigProcessor.DemoService" } } ] } ] 

рдЙрд╕рдХреЗ рдмрд╛рдж, application.properties рдХреЗ рд▓рд┐рдП Demo.service рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ, рджреЛ рд╕реЗрд╡рд╛рдУрдВ рдХрд╛ рдПрдХ рд╡рд┐рдХрд▓реНрдк рдЙрдкрд▓рдмреНрдз рд╣реЛрдЧрд╛, рдЖрдк рдЙрдирдХрд╛ рд╡рд┐рд╡рд░рдг (рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ рд╡рд┐рд╡рд░рдг) рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред

рдЫрд╡рд┐

рдЕрдм рд╕рд╣реА рд╕реЗрд╡рд╛ рдЪреБрдирдирд╛, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рдмрджрд▓рдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИред рдСрдмреНрдЬреЗрдХреНрдЯ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд┐рдВрджреБ рд╣реИ, рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреЛ рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдереЛрдбрд╝реА рдорджрдж рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдЫреЛрдЯрд╛ рд╡рд░реНрдЧ рдХрдирд╡рд░реНрдЯрд░ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред

ServiceConverter
 @Component @ConfigurationPropertiesBinding public class ServiceConverter implements Converter<String, DemoService> { @Autowired private ApplicationContext applicationContext; @Override public DemoService convert(String source) { return (DemoService) applicationContext.getBean(source); } } 


рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреНрд▓рд╛рд╕ рдЖрд░реЗрдЦ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрди рд╕реЗрд╡рд╛рдУрдВ рдХреЛ рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реЗ рдХреИрд╕реЗ рдЕрд▓рдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ AppProperties рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрд▓рдн рд╣реИред

рдЫрд╡рд┐
рдорд╛рдиреНрдпрддрд╛ рд╕рдВрдкрддреНрддрд┐
AppProperties рд╡рд░реНрдЧ рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ, рдЖрдк JSR 303 рдХреЗ рдврд╛рдВрдЪреЗ рдХреЗ рднреАрддрд░ рдЙрдкрд▓рдмреНрдз рдЪреЗрдХ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВрдиреЗ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдпрд╣рд╛рдВ рд▓рд┐рдЦрд╛ рдерд╛ред рдпрд╣ рдПрдХ рд╕рддреНрдпрд╛рдкрди рдпреЛрдЧреНрдп, рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣реЛрдЧрд╛ред

рдХрдВрд╕реЛрд▓ рдЖрдЙрдЯрдкреБрдЯ

рдЫрд╡рд┐

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╕рдВрд░рдЪрдирд╛

рдЫрд╡рд┐

рдкреВрд░реНрдг рдлрд╝рд╛рдЗрд▓ рдЕрддрд┐рд░рд┐рдХреНрдд-рд╡рд╕рдВрдд-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди-рдореЗрдЯрд╛рдбреЗрдЯрд╛ред Json

рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд╕рдВрдд-рд╡рд┐рдиреНрдпрд╛рд╕-рдореЗрдЯрд╛рдбрд╛рдЯрд╛
 { "groups": [ { "name": "demo", "type": "com.example.demoConfigProcessor.AppProperties", "sourceType": "com.example.demoConfigProcessor.AppProperties" } ], "properties": [ { "name": "demo.contexts", "type": "java.util.Map<java.lang.String,java.lang.Integer>", "sourceType": "com.example.demoConfigProcessor.AppProperties" }, { "name": "demo.vehicle", "type": "java.lang.String", "sourceType": "com.example.demoConfigProcessor.AppProperties" } ], "hints": [ { "name": "demo.vehicle", "values": [ { "value": "car make A", "description": "Car brand A is allowed." }, { "value": "car make B", "description": "Car brand B is allowed." } ] }, { "name": "demo.service", "providers": [ { "name": "spring-bean-reference", "parameters": { "target": "com.example.demoConfigProcessor.DemoService" } } ] } ] } 


рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдЯрд╛рдбреЗрдЯрд╛ рд╕рд╛рдордЧреНрд░реА

Source: https://habr.com/ru/post/hi430256/


All Articles