Java扫描包

在Java中,经常会有 “ 扫描某个包,然后找出全部的 class 的需求。

Spring工具

spring 对这方面提供了支持,直接用即可,前提是,对象要注册到容器内部;
AbstractApplicationContext (上下文)、ConfigurableListableBeanFactory(BeanFactory)等对象均可使用。

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.stereotype.Controller;

class BeanFactoryPostProcessorExample implements BeanFactoryPostProcessor {

    @Override
    public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException {
        //获取带有Controller注解的Bean
        String[] names= beanFactory.getBeanNamesForAnnotation(Controller.class);
    }
}

Reflections

Reflections这个工具包也很不错,Maven的依赖如下:

    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
      <version>22.0</version>
    </dependency>
    <dependency>
      <groupId>org.reflections</groupId>
      <artifactId>reflections</artifactId>
      <version>0.9.10</version>
    </dependency>
    <dependency>
      <groupId>org.javassist</groupId>
      <artifactId>javassist</artifactId>
      <version>3.15.0-GA</version>
    </dependency>
        Reflections reflections = new Reflections("com.sea.server.hessian");
        Set<Class<?>> hessianImpls = reflections.getTypesAnnotatedWith(Controller.class);

Java扫描包

基本原理,就是直接遍历 target 目录(或者 jar 文件),通过 Class.forname() 构建对象实例。
.class 文件的相对路径,就是全类名。

 

posted on 2018-06-08 23:46  疯狂的妞妞  阅读(1367)  评论(0编辑  收藏  举报

导航