`
raymond.chen
  • 浏览: 1426297 次
  • 性别: 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扫描器—spring组件扫描使用详解

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

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

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

    springboot自定义自动装配.rar

    Spring Boot的自动配置理念是基于“约定优于配置”,它能根据项目中的依赖自动配置Bean,极大地简化了Java应用的开发。下面我们将深入探讨Spring Boot自定义自动装配的相关知识点。 一、理解自动配置 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 Boot的健身房管理系统。.zip

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

    spring-customstart.rar

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

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

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

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

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

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

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

    以注解方式模拟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`...

    详尽的Spring2.0学习提纲

    2. 事务管理:讲解Spring的事务传播行为,配置事务管理器,以及基于注解的事务控制。 六、Spring整合其他技术 1. Spring与MyBatis集成:了解如何将Spring与MyBatis结合,实现DAO层的灵活操作。 2. Spring与...

    JAVA 插件化漏洞扫描器.zip

    Java插件化漏洞扫描器是一款基于JavaFX图形用户界面(GUI)设计的工具,主要用于检测和识别Java应用程序中的安全漏洞,特别是针对Weblogic、Tomcat、Shiro和Spring等流行框架的潜在问题。这款扫描器的出现,对于IT...

    spring-boot学习demo.zip_DEMO_SpringBoot_spring boot_spring-boot_sp

    - Application:通过`@SpringBootApplication`注解,实现主类的自动扫描和启动。 - Command Line Runner与Application Runner:支持命令行接口下的应用启动和自定义启动逻辑。 - Actuator:提供应用监控和管理...

    Spring-Boot-demo

    2. 主启动类:通常包含`@SpringBootApplication`注解,这是Spring Boot应用的入口,启动Spring的自动配置和组件扫描。 3. 控制器:使用`@RestController`注解的类,处理HTTP请求,返回JSON或其他类型的数据。 4. ...

    mybatis-spring-1.2.3.zip

    - `mybatis-spring-1.2.3-sources.jar` 提供了源代码,对于开发者来说,这是一个非常有用的资源,可以深入理解 MyBatis-Spring 的内部实现,进行自定义扩展或调试。 6. **集成步骤**: - 配置数据源和事务管理器...

    Spring中文帮助文档

    12.2.4. 不使用回调的基于Spring的DAO实现 12.2.5. 基于Hibernate3的原生API实现DAO 12.2.6. 编程式的事务划分 12.2.7. 声明式的事务划分 12.2.8. 事务管理策略 12.2.9. 容器资源 vs 本地资源 12.2.10. 在应用...

    基于springboot集成mybatis、durid和自定义消息转换项目

    在本项目中,我们主要探讨的是如何将Spring Boot与MyBatis、Druid以及自定义消息转换器(MessageConverter)进行集成,以构建一个高效、可扩展的应用程序。Spring Boot以其简洁的配置和快速的开发体验深受开发者喜爱...

    Spring Boot 教程、技术栈示例代码,快速简单上手教程。

    - **自动配置**:Spring Boot 通过扫描特定的包来发现组件,并基于这些组件自动进行配置,如数据源、缓存、消息等。 - **起步依赖**:Spring Boot 通过“起步依赖”(Starter POMs)提供了一种简单的方式来添加功能...

Global site tag (gtag.js) - Google Analytics