Spring 包扫描
来源:互联网 发布:对空间数据的编辑 编辑:程序博客网 时间:2024/06/06 02:35
这是入口
public class BeanScannerConfigurer implements BeanFactoryPostProcessor, ApplicationListener<ContextRefreshedEvent> { private Scanner scanner; public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { scanner = new Scanner((BeanDefinitionRegistry) beanFactory); } @Override public void onApplicationEvent(ContextRefreshedEvent event) { if (event.getApplicationContext().getParent() == null) { scanner.setResourceLoader(event.getApplicationContext()); scanner.scan("com.hieip"); } }}这是扫描器主体
public final class Scanner extends ClassPathBeanDefinitionScanner { public Scanner(BeanDefinitionRegistry registry) { super(registry); } public void registerDefaultFilters() { this.addIncludeFilter(new AnnotationTypeFilter(Component.class)); } public Set<BeanDefinitionHolder> doScan(String... basePackages) { Assert.notEmpty(basePackages, "At least one base package must be specified"); Set<BeanDefinitionHolder> beanDefinitions = new LinkedHashSet<BeanDefinitionHolder>(); for (String basePackage : basePackages) { Set<BeanDefinition> candidates = findCandidateComponents(basePackage); for (BeanDefinition candidate : candidates) {// candidate.hasAttribute() //todo 实现是否属于该注解 Class<?> clazz = null; String beanClassName = candidate.getBeanClassName(); try { clazz = Class.forName(beanClassName);//反射生成对象 } catch (ClassNotFoundException e) { e.printStackTrace(); } Method[] methods = clazz.getMethods();//获取方法 for (Method method: methods ) { Annotation annotation = method.getAnnotation(AuthAnnotation.class);//获取权限注解 if(null!=annotation){//判断是否有注解 String beanName = beanClassName.substring(beanClassName.lastIndexOf(".")+1); beanDefinitions.add(new BeanDefinitionHolder(candidate,beanName));//生成返回对象 } } } } return beanDefinitions; } public boolean isCandidateComponent(AnnotatedBeanDefinition beanDefinition) { return super.isCandidateComponent(beanDefinition) && beanDefinition.getMetadata() .hasAnnotation(Service.class.getName()); }}
阅读全文
0 0
- Spring包扫描
- Spring 包自动扫描
- spring 扫描包 不起作用
- Spring 包扫描
- spring component-scan 包扫描
- spring扫描包管理bean
- spring 和 spring mvc 扫描包问题
- Spring 学习记录 4 扫描包
- Spring 使用@ComponentScan扫描注解包
- spring组件扫描包component-scan
- spring和springMVC扫描包的问题
- Spring和SpringMVC的包扫描问题
- spring包扫描<context:component-scan>说明
- Spring扫描自定义jar包中的Bean
- Spring和Spring MVC包分开扫描原因
- 为啥Spring和Spring MVC包扫描要分开?
- 扫描包
- Spring 自动扫描 不支持jar包 <component-scan> 的解决方案
- MongoDB—索引的建立与维护
- 【Codeforces 822D. My pretty girl Noora】+ 数论
- Java 多线程(一)
- hdu1285 【拓扑入门】
- 初学es6写了个观察者模式,请多指教!!!!
- Spring 包扫描
- numpy.argmax/argmin/max/min
- MySQL基础入门—创建数据库并插入数据
- Intellij IDEA 导入或运行流式处理框架storm以及java.lang.NoClassDefFoundError报错的解决方案
- SpringBoot DevTools 介绍
- Android WindowManager悬浮窗:不需要申请权限实现悬浮
- 救济金发放 UVA 133
- Qt中Ui的使用
- vmware虚拟机克隆