Различные способы задания конфигурации Spring Beans
С помощью xml-файла resources/beans.xml
Определение resources/beans.xml:
<bean id="russianGreeter" class="ru.perm.v.springconfig.greeters.RussianGreeter"/> <bean id="danishGreeter" class="ru.perm.v.camelinaction.greeters.greeters.DanishGreeter"/> <bean id="englishGreeter" class="ru.perm.v.springconfig.greeters.EnglishGreeter"/> <bean id="greetMain" class="ru.perm.v.springconfig.greeters.GreetMainApplication"> <property name="greeter" ref="russianGreeter"/> </bean>
Импорт в проект:
@Configuration
@ImportResource({"classpath*:beans.xml"})
public class BeansConfiguration {
}
Или можно так подгрузить и получить bean :
@SpringBootApplication
public class GreetMainApplication {
public static void main(String[] args) {
SpringApplication.run(GreetMainApplication.class, args);
ApplicationContext context =
new ClassPathXmlApplicationContext("beans.xml");
GreeterService greeterService =
(GreeterService) context.getBean("selectedGreeterService");
System.out.println(greeterService.getHello()); // Hello, vasi!
}
}
или как обычно:
@RestController
@RequestMapping("/greet")
public class GreeterRest {
/**
* inject from beans.xml property <property name="greeter" ref="russianGreeter"/>
*/
@Autowired
GreeterService selectedGreeterService;
Запуск:
$ mvn compile exec:java -Dexec.mainClass=ru.perm.v.camelinaction.springconfig.GreetMainApplication
С помощью @Configuration и @Bean в conf/ConfigFromJava
С помощью @Configuration и @Bean. Показано в conf/ConfigFromJava:
@Configuration
public class ConfigFromJava {
@Bean
public String beanOneFromConfigFromJava() {
return "beanOne";
}
@Bean
public String beanTwoFromConfigFromJava() {
return "beanTwo";
}
}
resources/beans.xml Использование в ru.perm.v.springconfig.rest.ConfigFromJavaRest.java как обычно:
@RestController
@RequestMapping("/simple_conf")
public class ConfigFromJavaRest {
@Autowired
String beanOneFromConfigFromJava;
@Autowired
String beanTwoFromConfigFromJava;
....
Unit tests
$ mvn test
Сборка исполняемого jar
$ mvn package
Запуск:
java -jar target/camel-spring-0.0.1.jar
Примечания:
- Удален WARNING "172 [main] WARN org.springframework.beans.factory.xml.ResourceEntityResolver - DTD/XSD XML entity http://www.springframework.org/schema/beans/spring-beans.xsd not found, falling back to remote https resolution". Исправлен заголовок файла beans.xml.
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
- Исправление ошибки: An exception occured while executing the Java class. Line 15 in XML document from class path resource [beans.xml] is invalid: Attribute "xmlns" must be declared for elementtype "beans". Причина - удален заголовок:
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">