标签:异常 维护 intro 基本 tps eth war 默认 private
Spring框架包含很多内容,需要了解spinrg cloud就要看spring boot,而spring boot又要看Spring Core(Spring Framework)
的基本介绍。
花了两天左右,断断续续看了spring core相关的教程,包括
java annotation
相关的一些,在开始的时候看到会感觉一头雾水。初步了解Spring以后,个人理解Spring的功能就是做依赖注入(从我目前了解的Spring Core
的角度来说,Spring Boot
等还没学习)。Spring Framework的各种功能,围绕如何配置依赖注入展开。
Bean是Spring操作的基本单位,Bean可以被注入依赖,也可以作为依赖被注入到其他的Bean中。
那么什么是Bean,任何Class可以通过XMl配置,或者注解annotation
的方式被识别为Bean。
一个类/对象,从Bean的角度,他还有类的类型,Bean的名字、别名等相关信息,通过这些信息,可以以各式各样的手段,设置需要被注入的Bean。
Bean的信息被加载到ApplicationContext
中,或者说ApplicationContext
维护一系列Bean的关系,在需要的时候生成Bean,在需要的地方使用适当的Bean注入,并且对Bean的生命周期可以进行一系列定制化操作。
默认spring的容器在初始化时就会创建所有的bean,bean是单例模式的,除非特别的指明其他的scope
(如prototype)。
所以当其他地方需要某个bean时,初始化时创建的bean 就会被提供出来。
首先spring的依赖注入,都是基于bean的基础上进行的。
需要的地方可以是一个bean的:
通过XML配置,或者@Autowired/@Inject等注解方式,标识这个地方的参数需要依赖注入
一般是通过名字注入。
比如一个bean注册时,名字叫CapitalA
的Capital类,另一个bean需要一个名称为CapitalA
的bean,就可以通过
@Autowired
@Qualifier("CapitalA")
private Capital capital;
来配置注入。
当然可以有更简单的方式,比如整个程序里,只有一个Capital类型的bean,那么省略bean的名字,Spring也可以按类型定位到所需要的bean。
另外还可以通过字段的名字来寻找,是第三优先级的查找。
bean的生命周期,有初始化前,初始化中,初始化后,销毁等。
bean的初始化中和销毁前的这两个情况,可以通过如下方式定义
init-method
, destroy-method
@PostConstruct
和PreDestroy
bean的初始化前和初始化后可以通过BeanPostProcessor
接口的各个实现类来注册,spring会识别接口的实现,自动在每个(或者指定的)bean的两个阶段调用接口方法。
这个其实类似生命周期的概念,bean可能需要引用spring这个容器类(ApplicationContext本身,或者他实现的一些其他接口),获取一些特定的不是配置生成的bean,或者获取资源文件等。
这时候通过实现各种-Aware接口的方法,spring会在创建bean的初始化过程中,注入这个bean需要的容器相关的类。
除了spring自带的,还有JSR-250\JSR-330等规范定义的注解。
首先注解也都是为了实现依赖注入相关功能的,不过比较一开始令我疑惑的是@Component/@Service/@Repository/@Controller。
这里说的我觉得比较清楚,这些注解其实都是扩展的Bean类,都能被组件扫描到,使用不同的注解,Spring在处理过程中会稍有不同,比如Repository会特殊处理其中抛出的异常以匹配数据库异常。
另外这些注解多用于语义表述,清楚的标明每个类的层次,相比而言@Component没有确切业务层次含义。
标签:异常 维护 intro 基本 tps eth war 默认 private
原文地址:https://www.cnblogs.com/mosakashaka/p/12609077.html