2016-07-07 59 views
1

在我的应用我有一个默认实现接口,是服务:负载服务只有在没有其他服务

public interface MessageGenerator { 
    Message getMessage(); 
} 

@Service 
public class PropertiesMessageGenerator implements MessageGenerator { 
    @Override 
    public Message getMessage() { 
     return doSmth(); 
    } 
} 

这项服务是由弹簧靴子#ComponentScan加载和一切工作正常,直到我有加入@Profile

@Service 
@Profile("p1") 
public class ProfileMessageGenerator implements MessageGenerator { 
    @Override 
    public Message getMessage() { 
     return doSmthWithProfile(); 
    } 
} 

新的实现我怎样才能停止加载到DI服务PropertiesMessageGeneratorProfileMessageGenerator是上下文?

PS 我不能在MultipleMessages上使用@Profile("default"),因为我有一次加载的更多配置文件。

回答

2

如果不使用组件扫描您可以定义和挑选使用@Qualifier

如果你想使用组件扫描使用@Conditional注释保持豆。

创建您自己的'org.springframework.context.annotation.Condition.class'实现并将其传递给注释。

这可以读取一个属性来定义它何时返回true,当你想要的是在上下文中时可以设置它。

@ConditionalOnMissingBean(MessageGenerator.class)可以使用,如果你不想实现自己的条件。

或者只是用@Primary注释ProfileMessageGenerator。

+0

'''@ConditionalOnMissingBean(MessageGenerator.class)'''完成了这项工作。谢谢 – MAGx2