我想在启动时加载Spring Bean,它们存在于导入的maven依赖项中。有没有一种方法可以在不实际从注入的依赖jar中导入context.xml的情况下执行此操作?
我尝试了@EnableAutoConfiguration,但它没有用。
答案 0 :(得分:0)
M-M-M没有选择。如果不告诉它,那么Spring应用程序上下文中不会出现任何内容。
如果你的依赖关系只有context.xml
,那么除非@Import
,否则没有什么神奇之处。
@EnableAutoConfiguration
仅适用于org.springframework.boot.autoconfigure.EnableAutoConfiguration
注册的人。
请参阅spring.factories
中的spring-boot-autoconfigure/META-INFO
。
正确:阅读更多Spring Boot Docs。
所以,如果你不想@Import
,你可以用@Configuration
写一些MyAutoConfiguration
(例如@Import
)并添加spring.factories
你的任何jar包含的内容如:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=org.my.proj.autoconfigure.MyAutoConfiguration
答案 1 :(得分:0)
您可以在应用程序中创建一个bean并扩展要加载的bean。
示例(我用它来外化rabbitmq绑定定义):
外部:
package com.bpedroso.rabbitmq.beans;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.DirectExchange;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class CustomerMQBinding {
@Bean
public Queue myQueue() { ... }
@Bean
public Queue myDlq() { ... }
@Bean
public DirectExchange myExchange() { ... }
@Bean
FanoutExchange myDlx() { ... }
/*
* Bindings
*/
@Bean
Binding bindingMyrQueue(final Queue myQueue, final DirectExchange myExchange) { ... }
@Bean
Binding bindingMyDlq(final Queue myDlq, final FanoutExchange myDlx) { ... }
}
当前项目:
import org.springframework.context.annotation.Configuration;
import com.bpedroso.rabbitmq.beans.CustomerMQBinding;;
@Configuration
public class MyCustomerBindingMQBeans extends CustomerMQBinding {
}