美文网首页Spring
Spring原理浅谈

Spring原理浅谈

作者: 肥兔子爱豆畜子 | 来源:发表于2021-05-25 21:50 被阅读0次

    本文比较水,都是一些浅显的理解。

    核心原理

    首先笔者认为Spring框架的核心是两个东西:IoC容器和AOP

    • IoC容器 控制反转、spring容器、依赖注入、DI这几个概念都是有关联的,或者本质上说的是一个东西,可以理解为spring为bean提供的上下文、一种组装方式,管理依赖关系,承载实例的容器。当spring框架类启动的时候,这个时候不需要手工去new这些bean,而可以使得spring框架程序通过反射来创建这些我们写的类的实例,因为jvm从classPath中得到了所有的类的元信息、在方法区组织保存这些类信息,并在堆区创建了这些类的Class对象。
    • AOP 面向切面编程,横切面是相对于应用程序中的纵向模块也就是具体的业务功能模块来说的,横切面往往是每个纵向模块都需要的,比如说日志,安全、事务等。由spring统一通过动态代理的方式将这些横向模块插入到各个纵向模块,使得程序代码结构更为简练。业务代码与通用代码分开也是一种解耦的思想。

    Spring常用注解

    • @Controller 控制层组件,MVC里边的C,dispatcher分发处理器扫描识别Controller,然后根据@RequestMapping注解的要求,将对应的请求转到这个Controller来处理。
    • @RestController 相当于@Controller和@ResponseBody的组合效果,ResponseBody注解将Controller最后返回的对象,通过HttpMessageConverter转换为指定的格式,比如JSON格式,然后写入到Response的body数据区。
    • @Service用来表示这是一个业务层组件,@Repository表示是持久层或者说Dao层组件,@Component泛指组件、组件不好归类的时候就用这个。
    • @Autowired 将已经交由spring托管的bean,按照默认的约定规则由spring实例化并注入到当前位置、比如类的成员变量里。
    • @PathParam请求url上的变量映射为Controller方法的参数,@requestParam相当于request.getParameter("name")
    • @ModelAttribute 该Controller的所有方法在调用前先执行带这个注解的方法,可以在控制器父类中写带这个注解的方法,然后在执行控制器的时候就会自动先执行带ModelAttribute注解的方法了。

    常用的Spring与第三方框架的整合

    -权限 shiro是一个java的安全框架,有认证、授权、加密、会话管理

    • Ehcache纯java的进程内缓存框架,hibernate默认的CacheProvider
      redis C语言编写的分布式缓存,或者说k-v nosql数据库
    • 持久层框架 MyBatis、Hibernate
    • 定时任务 Quartz,spring-task相当于是轻量级的Quartz
    • 校验框架 Hibernate Validator 基于注解,常用于验证bean的字段。
      Oval 可扩展的java对象数据验证框架,验证规则可以通过配置文件、注解、pojo进行设定。

    Spring IoC容器

    大致上分为Bean定义注册表和Bean缓存池两个部分。

    BeanDefinition注册表

    通过配置信息生成这份注册表

    Bean缓存池

    本质上是个HashMap,spring根据BeanDefinition注册表实例化Bean,然后将实例存放在这个HashMap里供业务逻辑代码使用。

    自动装配的匹配方式

    手动装配是基于xml文件、构造方法、setter方法等。
    而常用的是以某种规则指示spring容器用自动的方式来进行依赖注入

    • byName 比如@Qualifier("baseDao")
    • byType 变量对应的类型是哪个类型的Bean,则实例化一个这个bean并注入
      @Autowired注解优先使用根据类型进行标注装配

    相关文章

      网友评论

        本文标题:Spring原理浅谈

        本文链接:https://www.haomeiwen.com/subject/qasojltx.html