搜索带注释类的整个类路径的最佳方法是什么?
我正在做一个库,我想允许用户注释他们的类,所以当Web应用程序启动时,我需要扫描整个类路径以获取某些注释.
你知道一个库或Java工具吗?
编辑:我正在考虑类似Java EE 5 Web服务或EJB的新功能.您使用@WebServiceor 注释您的类,@EJB并且系统在加载时查找这些类,以便远程访问它们.
@ComponentScan( //CS1\n basePackages = {"com.package.A", "com.package.B"},\n excludeFilters = @ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,\n value = {com.Package.A.SomeClass.class\n })\n)\n\n@ComponentScan( //CS2\n basePackages = { "com.package.A"}\n)\n@EnableAutoConfiguration\n@SpringBootApplication\npublic class Application {\n public static void main(String[] args) throws Exception {\n ConfigurableApplicationContext ctx = SpringApplication.run(Application.class, args);\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n上面是我的SpringBootApplication主要课程。正如你所看到的,我必须使用 Annnotation,而不是 xml。有两个@ComponentScanAnnotation,当然Spring是不允许的。对我来说,这两种不同@ComponentScan意味着两种不同的方式来启动我的应用程序。如果我选择使用 CS1(这意味着 @ComponentScan1),我必须注释 CS2\xef\xbc\x8can,反之亦然。
它不优雅,不优雅。尤其是对于那些 Spring 新手。所以我想知道如何根据我的.properties文件动态配置它。例如我的.properties文件中名为“isScanA”的参数是true,那么我可以使用CS1。或者任何其他优雅的方式。
\n\n我已经尝试了很多。
\n\n使用占位符。例如@ComponentScan(basePackage="${scan.basePackage}")。并在需要时更改.properties文件中的值。但这种方法无法修复excludeFilters。因为如果我用来FilterType.ASSIGNABLE_TYPE分配需要排除的类,则value应该是Class类型而不是String,如果value = {"${scan.excludeClass}"}使用的话。