`
raymond.chen
  • 浏览: 1437094 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

自定义基于Spring的自动扫描器

 
阅读更多

主要代码结构如下:

//Ant模式通配符的Resource查找器
ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();

//缓存MetadataReader工厂类
MetadataReaderFactory metadataReaderFactory = new CachingMetadataReaderFactory(resourcePatternResolver);

private final List<TypeFilter> includeFilters = new LinkedList<TypeFilter>();
private final List<TypeFilter> excludeFilters = new LinkedList<TypeFilter>();

public void loadClass(){
	try{
		//增加过滤条件,提取出有Component注解类的资源
		this.includeFilters.add(new AnnotationTypeFilter(Component.class, true, true));
		
		String pattern = ResourcePatternResolver.CLASSPATH_ALL_URL_PREFIX + "com/cjm" + "/**/*.class";
		//查找到一批资源
		Resource[] resources = resourcePatternResolver.getResources(pattern);  
		for(Resource resource : resources){
			if(resource.isReadable()){
				//获取资源的元数据读取器
				MetadataReader metadataReader = metadataReaderFactory.getMetadataReader(resource);
				
				//对资源进行过滤处理
				if(isCandidateComponent(metadataReader)){
					//从元数据中取得类名
					String className = metadataReader.getAnnotationMetadata().getClassName();
					//根据类名记载类
					Class<?> clazz = ClassUtils.forName(className, Test.class.getClassLoader());
					System.out.println(clazz.getName());
				}
			} 
		}
	}catch(Exception ex){
		ex.printStackTrace();
	}
}

private boolean isCandidateComponent(MetadataReader metadataReader) throws IOException {
	for (TypeFilter tf : this.excludeFilters) {
		if (tf.match(metadataReader, this.metadataReaderFactory)) {
			return false;
		}
	}
	for (TypeFilter tf : this.includeFilters) {
		if (tf.match(metadataReader, this.metadataReaderFactory)) {
			return true;
		}
	}
	return false;
}

 

分享到:
评论

相关推荐

    spring-boot-starter-hbase自定义的spring-boot的hbasestarter

    在Spring Boot的哲学中,自动配置是通过扫描类路径、分析依赖来自动配置bean的一种机制。当`spring-boot-starter-hbase`被引入项目后,它会检测相关依赖,如HBase的客户端库,然后自动配置HBase的连接池、表管理器等...

    Spring扫描器—spring组件扫描使用详解

    Spring组件扫描的原理基于Java的注解处理和反射机制。它会遍历指定包及其子包下的所有类,寻找带有特定注解(如@Service、@Component、@Repository、@Controller等)的类,并将这些类实例化为Spring容器中的bean。...

    (源码)基于Spring Boot和Spring Security的权限管理系统.zip

    # 基于Spring Boot和Spring Security的权限管理系统 ## 项目简介 本项目是一个基于Spring Boot和Spring Security的权限管理系统,旨在提供一个全面的用户... 在应用启动时自动扫描并初始化权限资源。 3. 角色管理

    springboot自定义自动装配.rar

    Spring Boot的自动配置理念是基于“约定优于配置”,它能根据项目中的依赖自动配置Bean,极大地简化了Java应用的开发。下面我们将深入探讨Spring Boot自定义自动装配的相关知识点。 一、理解自动配置 1. **自动...

    基于Spring Boot的权限人事OA系统.zip

    权限人事OA系统是一个基于Spring Boot、LayUI、Thymeleaf等技术栈构建的企业级办公自动化系统。该系统旨在提供一个高效、安全、易用的平台,用于管理企业内部的权限、人事、办公等业务流程。 ## 主要功能 ### 1. ...

    基于spring boot 的spring-boot-starter-hbase自动注解实现

    6. **Repository接口**: Spring Data HBase提供了一个Repository抽象层,可以定义自定义的Repository接口,Spring会自动实现这些接口,提供基本的数据操作方法。例如: ```java public interface MyRepository ...

    Spring Boot+Redis+拦截器+自定义Annotation如何实现接口自动幂等.docx

    Spring Boot+Redis+拦截器+自定义Annotation实现接口自动幂等 在实际的开发项目中,一个对外裸露的接口往往会濒临无数次哀求,我们来说明一下幂等的概念:随意多次执行所产生的影响均与一次执行的影响相同。根据这...

    基于Spring的web框架使用说明

    ### 基于Spring的Web框架使用说明 #### 框架概述 本文档旨在介绍一个基于Spring技术栈构建的Web应用框架的核心组件及其使用方式。该框架采用经典的MVC架构设计模式,通过分层的方式来组织代码,提高系统的可维护性...

    毕业设计,基于Spring Boot的健身房管理系统。.zip

    综上所述,这个基于Spring Boot的健身房管理系统涉及的技术和知识点包括Spring Boot自动配置、Spring Data JPA、数据库管理、前端模板引擎、Spring Security、RESTful API设计以及项目构建工具等。通过这个项目,...

    Spring学习之(四)基于注解的组件扫描.pdf

    ### Spring学习之(四)基于注解的组件扫描 #### 一、组件扫描概述 **组件扫描**是Spring框架提供的一种强大的功能,它允许开发者通过简单的注解来配置和管理应用中的组件,从而大大简化了应用程序的配置工作,并...

    spring-customstart.rar

    而创建自定义的 Spring Boot Starter(启动器)是 Spring Boot 提供的一项强大功能,允许开发者根据项目需求定制自己的依赖集合,以实现更高效、更便捷的开发体验。 标题 "spring-customstart.rar" 暗示了这个...

    详解 Spring 3.0 基于 Annotation 的依赖注入实现

    - 通过 `&lt;context:component-scan&gt;` 标签,可以在 XML 配置文件中指定基础包,让 Spring 自动扫描这些包及其子包下的类,寻找带有特定注解的类,将它们注册为 Bean。例如: ```xml ``` 3. **...

    自定义ioc容器,spring ioc容易模拟程序

    Spring的容器更加复杂和强大,它支持XML配置、基于注解的配置,以及更复杂的依赖解析规则。此外,Spring还提供了AOP(面向切面编程)、事务管理、数据访问等功能,使其成为企业级应用开发的首选框架。 总的来说,...

    SpringBoot启动配置原理_SpringBoot自定义starters.zip

    Spring Boot 是一个基于 Java 的框架,它简化了创建独立、生产级别的基于 Spring 应用的流程。这个压缩包文件 "SpringBoot启动配置原理_SpringBoot自定义starters.zip" 显然是关于理解 Spring Boot 启动配置以及如何...

    以注解方式模拟Spring IoC AOP

    Spring提供了两种主要的AOP实现方式:基于代理(Proxy-based)和基于注解(Annotation-based)。 - **基于代理的AOP**:Spring使用JDK动态代理或CGLIB动态代理创建目标对象的代理,代理对象在调用目标方法前后执行...

    ssh2框架整合,struts2和hibernate均交由spring管理,用注解的方式由spring注入

    例如,可以通过`@Resource`或`@Autowired`注解在类成员变量上,让Spring自动寻找匹配类型的bean进行注入。另外,`@Component`、`@Service`、`@Repository`和`@Controller`等注解用于定义不同类型的bean,`@Scope`...

    详解Spring_3.0基于Annotation的依赖注入实现

    为了使上述注解生效,需要在Spring的配置文件中启用自动扫描功能。这可以通过`&lt;context:component-scan/&gt;`元素来实现,例如: ```xml &lt;beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi=...

    SpringBoot+SpringCloud面试题.doc

    - `@SpringBootApplication`是核心注解,整合了@Configuration、@EnableAutoConfiguration和@ComponentScan,用于声明这是一个Spring Boot应用并启动自动配置和组件扫描。 6. **Spring Boot的特性开启** - 通过...

    Spring Boot 学习笔记完整教程.pdf

    Spring Boot是一种基于Spring框架的开源项目,旨在简化Spring应用的初始搭建以及开发过程。Spring Boot提供了一种快捷的方式,让开发者能够快速构建独立的、生产级别的基于Spring框架的应用。Spring Boot的核心特性...

Global site tag (gtag.js) - Google Analytics