`
ctxyzhanwei
  • 浏览: 10207 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

Spring注解原理的初步研究

阅读更多
提供自动扫描功能的核心类是:ClassPathBeanDefinitionScanner

使用Classpath扫描机制:第一种是直接使用AnnotationConfigApplicationContext,该类有一个scan(String
basePackages)方法,可以对指定的包进行扫描

1.配置需要扫描的类;

2.在需要被纳入Spring容器的类上加上相应的注解;

3.Spring在类路径下寻找标注了注解的类,并把这些类纳入Spring容器中管理。


读取配置文件,获取配置的包路径。根据包路径,获取包下所有的class对象,通过getAnnotion()方法,判断是否有注解且注解的类型是否在过滤规则中存在,若通过过滤则存放到spring容器中,

提供自动扫描功能的核心类是:ClassPathBeanDefinitionScanner,该类根据提供个基础包名,扫描classpath下与该包名的路径下,找到复合条件的类并注册为Spring的一个Bean。


很早之前,为了简化配置信息,自己写了一坨代码,基于classpath扫描类信息,加载.
其实,在spring中,已经提供了类似组件(后知后觉了...):

org.springframework.core.io.support.PathMatchingResourcePatternResolver  资源解析器(基于路径的正则表达式)
org.springframework.core.type.classreading.MetadataReader ClassMeta信息解读器
public class Test {
 
      /* 资源路径 */
      private static final String                  PATH           = "classpath*:com/alibaba/javalab/t*/**/*.class";
      /* 资源解析器 */
      private static final ResourcePatternResolver RESOLVER       = new PathMatchingResourcePatternResolver();
     /* Meta信息Reader Factory.用于创建MetaReader */
     private static final MetadataReaderFactory   READER_FACTORY = new SimpleMetadataReaderFactory();
 
     public static void main(String[] args) throws Exception {
         //根据正则表达式,得到资源列表
         Resource[] resources = RESOLVER.getResources(PATH);
         for (Resource res : resources) {
             //通过 MetadataReader得到ClassMeta信息,打印类名
             MetadataReader meta = READER_FACTORY.getMetadataReader(res);
             System.out.println(meta.getClassMetadata().getClassName());
         }
     }
}


基于struts2 的自动扩展插件:
扩展方式为:jar文件加上配置文件中的相关配置.
扩展原理为:
struts2启动配置,开始分析FiterDispatcher过滤类:
获取默认的参数创建dispacher对象,在对dispacher对象的一系列初始化工作中,读取系统配置文件以及用户自定义的配置文件。在读取xml配置文件时,根据用户配置的名称(如果没有,则采用系统默认的struts-default.xml,struts-plugin.xml,struts.xml三个名称),利用配置管理器对象,来加载项目中的xml配置文件,加载过程如下:
通过ClassLoader类中的getResources()方法,获取项目中所有与名称相匹配的文件,并采用DOM方式解析xml,对xml文件中的每个<bean>元素,获取type,name,class,static,scope,optional这些属性,针对每个属性的值做相应的处理,将属性提交给struts管理容器注册,最后注入bean。
分享到:
评论

相关推荐

    spring security初步搭建

    通过阅读和理解这些源代码,你将能够深入理解Spring Security的工作原理,以及如何根据需求定制和扩展其功能。 总之,Spring Security的初步搭建是学习其核心机制的关键步骤。通过注释详尽的源码,你可以逐步掌握...

    02-01-10-Spring事务传播原理及数据库事务操作原理1

    我们还将触及分布式事务的初步知识,帮助开发者更好地掌握基于Spring AOP的事务设计。 首先,Spring事务管理是基于面向切面编程(AOP)实现的,其主要目的是为了封装非功能性需求,如事务控制,使其不污染业务逻辑...

    spring3.1.2

    在数据访问层,Spring 3.1.2 对 JPA 和 Hibernate 的支持得到了加强,包括事务管理的优化和对 NoSQL 数据库的初步支持。它引入了新的数据存取接口,如 JdbcTemplate 和 SimpleJdbcInsert,这些简化了与数据库的交互...

    spring-framework-3.0源码地址

    通过深入研究Spring 3.0的源代码,开发者不仅可以了解其内部工作原理,还能学习到如何设计可扩展、松耦合的系统。同时,这也有助于我们更好地理解和利用Spring提供的各种功能,提升我们的开发技能。在实践中,结合...

    spring3.1.4 jar集合

    Spring 3.1.4是Spring框架的一个重要版本,它带来了许多增强特性和改进,以提升应用程序开发的效率和灵活性。...了解并熟练掌握这些知识点,对于理解Spring框架的工作原理和优化应用性能至关重要。

    spring3.2.0源码

    7. **WebSocket支持**:随着Web实时通信的需求增长,Spring 3.2.0添加了对WebSocket的初步支持,提供了一套完整的API和Stomp协议支持,帮助开发者构建实时双向通信的应用。 8. **性能提升**:3.2.0版本在性能方面也...

    SpringCloud学习第一天,helloWorld

    在本篇【SpringCloud学习第一天,helloWorld】的教程中,我们将初步接触并了解Spring Cloud这一微服务框架,以及如何创建一个基本的“Hello, World”应用。首先,我们需要理解Spring Cloud的核心概念和作用。 ...

    Spring Boot参考指南

    1. Spring Boot介绍:介绍了Spring Boot的基本概念、设计目的以及一些关键特性,让开发者对Spring Boot有一个初步的认识。 2. 系统要求和安装:这部分内容主要介绍了运行Spring Boot应用所需的环境和系统要求。包括...

    手写Spring框架之: HelloSpring

    通过这个"HelloSpring"示例,我们对Spring框架的基本运作有了初步了解。Spring不仅提供了依赖注入,还包含其他核心功能,如AOP(用于添加日志、事务管理等跨切面关注点),以及数据访问、Web开发和任务调度等模块。...

    Spring boot 官方介绍文档

    首先,文档目录部分提到了几个关键章节,包括关于文档的介绍、获取帮助的方法、初步步骤、与Spring Boot的工作、学习Spring Boot特性、向生产环境迁移以及高级主题。这些章节是入门Spring Boot的重要指引,它们将...

    spring 入门 示例 简单实现

    通过这个简单的入门示例,你应该对Spring的基本工作原理有了初步了解。继续深入学习,你会发现Spring提供的各种模块和特性,如Spring MVC(Web开发),Spring Data(数据库访问),Spring Security(安全)等,都将...

    spring MVC中文教程

    - **Spring框架起源**:Spring框架由Rod Johnson创建,最初源于他的著作《Expert One-On-One J2EE Design and Development》,该书深入探讨了J2EE应用的设计原则,并提供了一个初步的开发框架实现——interface21...

    Spring學習筆記DEMO代碼(一)

    标题 "Spring學習筆記DEMO代碼(一)" 暗示了这是一个关于Spring框架学习的初步示例,特别是涉及到注解驱动的自动装配(Autowired)。在这个压缩包中,我们可能找到了一个基础的Spring应用,它展示了如何利用@...

    Spring3 MVC Annotaction入门(登录示例)

    **Spring3 MVC 注解入门...通过本示例,你应该对Spring MVC的基本工作原理和注解有了初步的理解。要深入了解Spring框架,还需要学习更多的概念和技术,如AOP(面向切面编程)、Spring Security以及Spring Boot等。

    spring4.3.29-3.2.18

    源码编译使用.zip" 和 "spring-framework-3.2.18.RELEASE.zip" 提供了这两个版本的源代码,这对于深入理解Spring的工作原理、调试问题或进行自定义扩展非常有价值。通过阅读和分析源码,开发者可以更好地掌握Spring...

    Spring Boot 中文文档(带标签)

    这一部分是Spring Boot的初步介绍,讲解了系统需求,Servlet容器的选择,Spring Boot的安装(包括Maven、Gradle、CLI等安装方式)以及如何从旧版本升级。此外,还提供了开发第一个Spring Boot应用程序的步骤,包括...

    【Spring-Boot开篇】

    【Spring-Boot开篇】是关于Spring Boot技术的初步介绍,Spring Boot是现代Java开发中的一个关键框架,它简化了创建独立、生产级别的基于Spring的应用程序。这篇博文可能涵盖了Spring Boot的基本概念、核心特性以及...

    spring3.x项目开发(5-10)

    最后,`chapter10`可能涵盖了Spring的高级话题,如消息支持(Message Driven POJOs)、集成测试或者Spring Boot的初步介绍。这章可能也会讨论如何使用Spring的定时任务(Task Scheduling)功能来执行周期性任务,...

    Spring AOP 入门实例

    标签“源码”提示我们可以深入研究Spring AOP的源代码,了解其内部工作机制,这对于提升我们的编程技能和理解Spring框架的工作原理非常有帮助。而“工具”标签可能暗示我们可以利用IDE或其他辅助工具来更高效地开发...

    Spring.pdf

    在给定文件中,主要涉及的知识点包括了Spring的基础概念、Bean配置与实例化、以及IoC(控制反转)和DI(依赖注入)的核心原理。 ### Spring 入门 在Spring的学习笔记中,首先介绍了Spring入门程序,即创建一个简单...

Global site tag (gtag.js) - Google Analytics