Spring基础知识点

Spring的组成
  • Spring是一个轻量级框架,可以一站式构建企业级应用。
  • Spring的模块可以分为6个
  1. Core Container(Spring的核心)【重要】
  2. AOP(面向切面编程)【重要】
  3. Web(主要是Spring MVC)【重要】
  4. Messaging(发送消息的组件)
  5. Data Access / Integration(数据访问和集成)
  6. Test(Spring 测试,包含Junit)
Spring中Bean的作用域
  • Spring早期的时候(1.x)
    • singleton:单例模式。
    • prototype:原型模式,每次从容器中调用Bean时,都会返回一个新的实例。
  • Spring 2.x
    • request:每次HTTP请求都会创建一个新的Bean
    • session:同一个HttpSession共享同一个Bean;不同的HttpSession使用不同的Bean。
    • globalSession:同一个全局Session共享一个Bean。
BeanFactory 和 ApplicationContext 的不同点
  • BeanFactory是Spring容器的root接口。懒加载,意味着只有在调用 getBeans()方法直接调用时才进行实例化bean。
  • ApplicationContext 是 Spring 应用程序的中央接口,用于向应用程序提供配置信息。继承了BeanFactory 接口,所以 ApplicationContext 包含 BeanFactory的所有以及更多的功能。主要功能是支持大型业务应用的创建。
  • 与 BeanFactory 懒加载的方式不同,ApplicationContext 是预加载,所以,每一个 bean 都在 ApplicationContext 启动之后实例化
  • 总结:ApplicationContext 包含 BeanFactory 的所有特性,通常推荐使用前者。但是也有一些限制情形,比如移动应用内存消耗比较严苛,在那些情景中,使用更轻量级的 BeanFactory 是更合理的。然而,在大多数企业级的应用中,ApplicationContext 是你的首选。
Spring中Bean的生命周期
  • 通常是指ApplicationContext中的Bean的生命周期(ApplicationContext提供的方法更丰富)
    在这里插入图片描述
IoC(Inversion of Control)控制反转、DI(Dependency Injection)依赖注入
  • IOC:由容器来创建对象并管理对象之间的依赖关系 。

    • 对于Spring框架来说,就是由Spring来负责控制对象的生命周期和对象间的关系。
    • 通俗的讲就是,在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过 DI 实现的。
    • 举个栗子:对象A需要操作数据库,以前我们总是要在A中编写代码来获得一个Connection对象,有了 spring 我们就只需要告诉 spring,A中需要一个 Connection,至于这个 Connection 怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖 Connection 才能正常运行,而这个 Connection是由 spring 注入到A中的,依赖注入的名字就是这么来的。
    • 目的:1. 降低类之间的耦合。2. 倡导面向接口编程,实施依赖倒换原则。3. 提高系统可插入,可测试,可修改等特性。
    • 具体做法:
      1. 将bean之间的依赖关系尽可能的转换为关联关系;
      2. 将具体类的关联尽可能的转换为对Java interface的关联,而不是与具体的服务对象相关联。
      3. 由IoC(容器)根据配置信息,实例化具体bean类、将bean之间的依赖关系注入进来。
  • DI:由容器动态的将某种依赖注入到组件之中。

    • 如何实现:反射!它允许程序在运行的时候动态生成对象、执行对象的方法、改变对象的属性。spring就是通过反射来实现注入的。
    • 依赖注入可以通过 setter 注入、构造器注入和接口注入三种方式实现,Spring支持setter注入和构造器注入。构造器注入需要注入依赖关系,settter注入需要类提供无参构造器或者无参的静态工厂方法来创建对象。
AOP(Aspect Oriented Programming)面向切面编程
  • 可以说是OOP(Object Oriented Programming)面向对象编程 的补充和完善。它利用一种称为 横切的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为Aspect ,即 切面。简单来说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,有利于未来的可操作性和可维护性。
  • 原理:(动态代理)AOP实现的关键在于AOP框架自动创建的AOP代理,AOP代理主要分为静态代理和动态代理,静态代理的代表为AspectJ;而动态代理则以Spring AOP为代表。通常使用AspectJ的编译时增强实现AOP,AspectJ是静态代理的增强,所谓的静态代理就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强。
  • 应用场景:Authentication 权限,Caching 缓存,Context passing 内容传递,Error handing 错误处理,Lazy loading 懒加载,DeBugging 调试,Persistence 持久化,Resource pooling 资源池,Synchronization 同步,Transactions 事务。
Spring事务管理
  • Spring支持 声明式事务和编程式事务,Spring默认声明式事务,因为这种方式和应用程序的关联较少,更符合轻量级容器的概念。声明式事务管理优于编程式事务,灵活方面不如编程式事务,编程式事务允许通过代码控制业务。
  • 事务分为全局事务局部事务,全局事务由应用服务器管理,需要底层服务器JTA支持(如WebLogic、WildFly等)。局部事务和底层采用持久化方案有关,例如使用JDBC时,需要使用Connection对象来操作事务;而采用Hibernate进行持久化时,需要使用Session对象来操作事务。
Spring的优点
  • 非侵入式框架:其目标是使应用程序代码对框架的依赖最小化,应用代码可以在没有Spring或者其他容器的情况下运行。
  • 提供了一个一致的编程模型,使应用直接使用POJO开阿发,从而可以使运行环境隔离开来。
  • 推动应用的设计风格向面向对象及面向接口编程转变,提高了代码的重用性和可测试性。
@Autowired和@Resource
  • 共同点

    • 两者都可以写在字段上和setter方法上。两者如果都写在字段上,就不需要再写setter方法。
  • 不同点

    • @Autowired:是按照类型(byType)装配依赖对象,默认情况下它要求依赖对象必须存在,如果允许null值,需要设置它的requried属性为false。如果我们想要使用按照名称(byName)来装配,可以结合**@Qualifier**一起使用。

    • @Resource:是按照名称(byName)自动注入的。@Resource有两个重要属性:name和type,Spring将@Resource注解的name属性解析为bean的名字,type属性解析为bean的类型。所以,如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不制定name也不制定type属性,这时将通过反射机制使用byName自动注入策略。

持久层
  • 含义:所谓持久就是将数据保存到可掉电式储存设备中以便今后使用,简单地说,就是将内存中的数据保存到关系型数据库、文件系统、消息队列等提供持久化支持的设备中。持久层就是系统中专注于实现数据持久化的相对独立的层面。
  • 目的:
    1. 数据存储逻辑的分离,提供抽象化的数据访问接口
    2. 数据访问底层实现的分离,可以在不修改代码的情况下切换底层实现
    3. 资源管理和调度的分离,在数据访问层实现统一的资源调度(如缓存机制)
    4. 数据抽象,提供面向对象的数据操作。
SpringMVC

在这里插入图片描述

  1. 客户端所有请求都交给中央控制器 DispatcherServlet 来处理,它负责调用系统的其他模块来真正处理用户的请求。
  2. DispatcherServlet 收到请求后,将根据请求的信息(包括URL、HTTP协议方法、请求头、请求参数、Cookie等)以及HandlerMapping的配置找到处理该请求的Handler(即Controller)。
  3. 通过HandlerAdapter对该处理器进行封装。
  4. HandlerAdapter是一个适配器,它用统一的接口对各种Handler中的方法进行调用。
  5. Handler完成对用户请求的处理后,会返回一个ModelAndView对象给DispatcherServlet。
  6. Dispatcher借助ViewResolver完成从逻辑视图到真实视图的解析工作。
  7. DispatcherServlet会利用视图对象对模型数据进行渲染。
    tcherServlet。
  8. Dispatcher借助ViewResolver完成从逻辑视图到真实视图的解析工作。
  9. DispatcherServlet会利用视图对象对模型数据进行渲染。
  10. 客户端得到响应,可能是一个普通的HTML页面,或者XML、JSON字符串,也有可能是一张图片或PDF文件。
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值