Spring Boot在运行时获取主类的名称

时间:2018-10-14 19:10:45

标签: java spring spring-boot annotations java-annotations

我正在尝试根据Scanning Java annotations at runtime中的答案编写用于自定义注释的扫描程序。

但是,为了加快处理速度,我只想扫描主包(具有主类及其子包的包)下的类。确定最简单的方法来确定包名称是从主类。

我正在编写的代码最终将存储在一个Spring Boot应用程序将使用的库中。因此,我无法知道主类的名称。在Spring Boot应用程序中,是否可以在运行时确定主类的名称?

此致

Anoop

1 个答案:

答案 0 :(得分:1)

假设您的主类带有@SpringBootApplication注释,则可以使用ApplicationContext::getBeansWithAnnotation()来完成:

@Service
public class MainClassFinder {

    @Autowired
    private ApplicationContext context;

    public String findBootClass() {
        Map<String, Object> annotatedBeans = context.getBeansWithAnnotation(SpringBootApplication.class);
        return annotatedBeans.isEmpty() ? null : annotatedBeans.values().toArray()[0].getClass().getName();
    }
}