2016-03-18 64 views
0

我有一组类,如下所示。只注册Spring应用程序上下文接口的实现?

public class ServiceA implements CommonInterface 
{ 
    public void startA() 
    { 
     .... 
    } 
} 

public class ServiceB implements CommonInterface 
{ 
    public void startB() 
    { 
     .... 
    } 
} 

是否有弹簧框架自动注册只有其实现CommonInterface到应用程序上下文和访问他们班什么办法?

+0

为什么不使用'@ Service'注释的任意实现?为什么不使用具有实现类型的'@ Autowire'来访问? –

+0

@KenBekov:'@ Service'将通过扫描base-packages来启用注册。但是我需要更多的过滤器,例如 - 实现CommonInterface的类类型。另一方面,@ Autowire'只会帮助自动注入引用对象,这不是我的场景。 –

回答

4

是的,这是可能的。如果您使用的是Java Configuration,则可以使用@ComponetScan将组件过滤为实现特定接口的组件。您需要禁用Spring使用的默认过滤器(基于检测标注类注释的类,即@Component,@Service等)。

@Configuration 
@ComponentScan(basePackages = {"com.mydomain.myapp.service"} , useDefaultFilters = false , includeFilters = {@Filter(type = FilterType.ASSIGNABLE_TYPE , value = CommonInterface.class)}) 
public class AppConfig{ 
    //@Bean methods 
} 

同样也可以在XML中使用上下文来实现:组件扫描

+0

是的。看起来不错。我没有@Configuration类来注册服务。同样的过滤器也适用于applicationcontext的扫描API。让我检查一下。 –

+0

+0

对不起,我会改变。我没有beans.xml文件也没有'@ configuration'类。我想要做的就是实例化一个'annotationConfigApplicationContext'对象,并使用它的'scan' api来提供过滤器。 'scan'的功能类似于'componentscan',但它是通过'applicationcontext'对象而不是'config'对象。 –

相关问题