如何从导入的maven依赖项加载spring bean而不导入context.xml

时间:2016-04-07 20:09:38

标签: spring-integration

我想在启动时加载Spring Bean,它们存在于导入的maven依赖项中。有没有一种方法可以在不实际从注入的依赖jar中导入context.xml的情况下执行此操作?

我尝试了@EnableAutoConfiguration,但它没有用。

2 个答案:

答案 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 {
}