我有一个自定义注释,它被声明为Spring托管服务:
@Service
public @interface MyServiceAnnotation {
// my service url
String url();
}
The above declaration enables my services to be autowired as Spring Managed beans.
@MyServiceAnnotation(url="/path/serviceLocation")
public class SomeService {
doWork();
}
但是,某些服务在
applicationContext.xml
中具有其bean定义。将@MyServiceAnnotation
添加到此类bean可以使它们既启用自动装配功能,又可以通过xml文件注入依赖项。由于与遗留代码相关的问题,我不想删除xml bean定义并使它们全部自动装配。
因此,有没有一种方法可以在这种情况下关闭自动装配并仍然使用
@MyServiceAnnotation
?理想情况下,我想在@Service
上具有MyServiceAnnotation
批注,现有服务仍将使用@MyServiceAnnotation
,但将基于xml注入其依赖项。如果没有xml bean定义,所有新服务将自动装配。一种可能的方法是创建与
NonSpringManagedMyServiceAnnotation
相同的MyServiceAnnotation
,但是上面没有@Service
批注。这样做的缺点是我必须复制MyServiceAnnotation
的其余代码,而我不想这样做。 最佳答案
这是一种方法,虽然可能不是最佳的。我假设您已经在xml中指定了component-scan
标记来扫描具有Spring构造型注释的类,这些标记支持exclude-filter
子标记以忽略特定的模式。如果您指定的文件遵循特定的模式(特定的程序包,特定的名称等),那么您可以简单地指定此子标签来忽略包含注释的类。
<context:component-scan base-package="mypackage">
<context:exclude-filter type="regex" expression=".*ToBeIgnoredNaming"/>
</context:component-scan>