码迷,mamicode.com
首页 > 编程语言 > 详细

Spring框架学习(一)

时间:2020-03-31 22:36:06      阅读:71      评论:0      收藏:0      [点我收藏+]

标签:异常   维护   intro   基本   tps   eth   war   默认   private   

Spring框架包含很多内容,需要了解spinrg cloud就要看spring boot,而spring boot又要看Spring Core(Spring Framework)的基本介绍。

花了两天左右,断断续续看了spring core相关的教程,包括

  • java2blog:看的一个回答推荐的,不过内容可能略有陈旧,倒不是体现在版本,而是页面之间跳转有问题,层次有点不清,感觉是疏于维护的样子
  • tutorialspoing,没有细看,因为想找一个稍微系统一点的,而在这里,似乎是只有spring的
  • 官方文档,以详细程度来说的确无出其右,但是有官方文档的通病,涉及各种细节,初学很容易陷进去,我初步浏览了一下bean和resource部分。里面会涉及不少我不了解的东西,因为本身对java也不太熟,所以不知道是java还是spring的内容。而有些内容的确是前后颠倒了,比如java annotation相关的一些,在开始的时候看到会感觉一头雾水。
  • howtodoinjava,这个看的比较多,是个人作者写的,比较通俗易懂,也没有涉及太多细节。

Spring学习内容

初步了解Spring以后,个人理解Spring的功能就是做依赖注入(从我目前了解的Spring Core的角度来说,Spring Boot等还没学习)。Spring Framework的各种功能,围绕如何配置依赖注入展开。

关于Bean

Bean是Spring操作的基本单位,Bean可以被注入依赖,也可以作为依赖被注入到其他的Bean中。

那么什么是Bean,任何Class可以通过XMl配置,或者注解annotation的方式被识别为Bean。

一个类/对象,从Bean的角度,他还有类的类型,Bean的名字、别名等相关信息,通过这些信息,可以以各式各样的手段,设置需要被注入的Bean。

框架基础

Bean的信息被加载到ApplicationContext中,或者说ApplicationContext维护一系列Bean的关系,在需要的时候生成Bean,在需要的地方使用适当的Bean注入,并且对Bean的生命周期可以进行一系列定制化操作。

怎么维护bean的信息

  1. 通过xml文件定义bean,以及bean中的属性依赖的bean/或者字面值
  2. 通过@Autowired等注解,标注一个类的某个字段、或者构造函数需要自动注入依赖。
  3. 通过@Component等标识标明一个类为Spring的组件,通过ApplicationContext的组件扫描方法,将所有扫描到的组件加入到框架维护的bean中。

如何生成需要的bean

默认spring的容器在初始化时就会创建所有的bean,bean是单例模式的,除非特别的指明其他的scope(如prototype)。

所以当其他地方需要某个bean时,初始化时创建的bean 就会被提供出来。

什么是需要的地方?

首先spring的依赖注入,都是基于bean的基础上进行的。

需要的地方可以是一个bean的:

  • 构造函数
  • 类成员(可以是Private)
  • getter/setter

通过XML配置,或者@Autowired/@Inject等注解方式,标识这个地方的参数需要依赖注入

需要的地方所谓的合适的bean是什么?

一般是通过名字注入。

比如一个bean注册时,名字叫CapitalA的Capital类,另一个bean需要一个名称为CapitalA的bean,就可以通过

@Autowired
@Qualifier("CapitalA")
private Capital capital;

来配置注入。

当然可以有更简单的方式,比如整个程序里,只有一个Capital类型的bean,那么省略bean的名字,Spring也可以按类型定位到所需要的bean。

另外还可以通过字段的名字来寻找,是第三优先级的查找。

维护生命周期

bean的生命周期,有初始化前,初始化中,初始化后,销毁等。

bean的初始化中和销毁前的这两个情况,可以通过如下方式定义

  • XML配置init-method, destroy-method
  • 注解@PostConstructPreDestroy
  • 实现特定相应接口,并实现对应的回调方法,spring框架会进行调用

bean的初始化前和初始化后可以通过BeanPostProcessor接口的各个实现类来注册,spring会识别接口的实现,自动在每个(或者指定的)bean的两个阶段调用接口方法。

各种-Aware接口

这个其实类似生命周期的概念,bean可能需要引用spring这个容器类(ApplicationContext本身,或者他实现的一些其他接口),获取一些特定的不是配置生成的bean,或者获取资源文件等。

这时候通过实现各种-Aware接口的方法,spring会在创建bean的初始化过程中,注入这个bean需要的容器相关的类。

关于注解

除了spring自带的,还有JSR-250\JSR-330等规范定义的注解。

首先注解也都是为了实现依赖注入相关功能的,不过比较一开始令我疑惑的是@Component/@Service/@Repository/@Controller。

这里说的我觉得比较清楚,这些注解其实都是扩展的Bean类,都能被组件扫描到,使用不同的注解,Spring在处理过程中会稍有不同,比如Repository会特殊处理其中抛出的异常以匹配数据库异常。

另外这些注解多用于语义表述,清楚的标明每个类的层次,相比而言@Component没有确切业务层次含义。

Spring框架学习(一)

标签:异常   维护   intro   基本   tps   eth   war   默认   private   

原文地址:https://www.cnblogs.com/mosakashaka/p/12609077.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!