SPRING-BAK
spring 是什么 #
Spring是一个轻量级的IoC和AOP容器框架。是为Java应用程序提供基础性服务的一套框架,目的是用于简化企业应用程序的开发,它使得开发者只需要关心业务需求。
spring 优点 #
低入侵,减少代码耦合,支持一些通用任务(鉴权,日志,事务等)的集中管理,对其他一些框架提供集成支持
spring IOC 理解 #
- IOC
IOC(Inversion of control. 控制反转),将bean对象的控制权交由spring去管理。 其中包括bean对象的创建与销毁,bean对象之间的依赖关系等。简单来讲,就是对象不用我们去new了,而是框架帮我们使用反射的方式去创建。 用户只需要在使用的时候注入即可。
- DI
DI (dependency inject ,依赖注入),程序运行期间如果发现对象需要依赖其他的对象。就会通过反射的方式自动处理依赖关系。 反射的功能就是在程序运行期间动态的生成对象,执行对象的方法,改变对象的属性等功能。
spring AOP 理解 #
AOP 面向切面编程。作为面向对象的一种补充,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装为一个可重用的模块,这个模块被命名为“切面”(Aspect),减少系统中的重复代码,降低了模块间的耦合度,提高系统的可维护性。可用于权限认证、日志、事务处理。 编程中使用cglib和jdk两种动态代理来实现。
BeanFactory 和 ApplicationContext区别 #
- MessageSource
用于消息资源国际化
- ResourcePatternResolver
在上一篇中我们介绍了Resource接口,它的出现是为了解决spring方便访问各种配置信息。 但Resource接口有一个问题,就是如果我们要访问同一个路径下的所有符合条件的配置,如果用Resource接口则会比较麻烦,因为它不支持通配符方式的文件读取,所以要将读取的配置文件名称全部写出来才可以。 spring为了解决这个问题,于是新定义了一个新接口,并实现了该接口特有的特性,也就是支持类似 Ant风格的通配符
- ApplicationEventPublisher
时间发布器
- EnvironmentCapable
提供环境处理能力,getEnvironment()返回的 Environment 不可配置。所以在ConfigurableApplicationContext重新定义getEnvironment()并缩小签名以返回一个ConfigurableEnvironment。在此之前 环境对象 是只读的。
spring 容器启动流程 #
启动流程
代码示例
spring bean生命周期 repo #
step | invoke | invoke | output |
createBeanInstance | - | - | Book initializing |
populateBean | - | - | setBookName: Book name has set. |
initializeBean | invokeAwareMethods | BeanNameAware | BeanNameAware.setBeanName() invoke |
BeanFactoryAware | BeanFactoryAware.setBeanFactory() invoke | ||
applyBeanPostProcessorsBeforeInitialization | ApplicationContextAwareProcessor | ApplicationContextAware.setApplicationContext() invoke | |
MyBeanPostProcessor implements BeanPostProcessor | MyBeanPostProcessor.postProcessBeforeInitialization invoke | ||
CommonAnnotationBeanPostProcessor | @PostConstruct | ||
invokeInitMethods | initializingBean | initializingBean.afterPropertiesSet() invoke | |
invokeCustomInitMethod | define constructor invoke | ||
applyBeanPostProcessorsAfterInitialization | - | MyBeanPostProcessor.postProcessAfterInitialization invoke | |
using | |||
destroy | - | @predestroy | - |
- | DisposableBean.destroy() invoke | - | |
- | define destroy invoke | - |