备注该笔记并非全部原创,主要做一个学习积累,后期不断更新补充。
一、spring IOC与DI
(1)概念解释:https://blog.csdn.net/qq_22654611/article/details/52606960
(2)IOC控制反转:控制是指谁来创建对象,传统应用程序对象的创建是由程序本身创建,使用spring后则交由spring容器创建;反转是指程序本身不去创建对象,变为被动接受对象(包括文件等)。
(3)DI依赖注入:依赖注入是为了提升组件的重用频次,为系统搭建一个可扩展的平台。依赖是指应用程序需要依赖IOC容器来提供对象所需要的外部资源,这些资源包括对象、文件、常量等。
(4)优点:
减少代码的耦合,可以使应用更加模块化
增加代码的复用率
资源更加统一管理
维护代码更加方便,一般只需要修改一下配置文件就ok了。
提升了程序的测试性
(5) 在应用代码中,我们无需使用new关键字新建对象。在业务代码中太多的new对象会导致代码耦合度过高。
应用中只需要使用HelloWorld的接口,不用关心HelloWorld接口的实现。我们只是告诉ApplicationContext,我们需要HelloWorld类型的对象,然后就获得了一个对象。
二、Spring中bean的作用域与生命周期https://blog.csdn.net/fuzhongmin05/article/details/73389779
(1)Bean概念:bean就是由IoC容器初始化、装配及管理的对象,除此之外,bean就与应用程序中的其他对象没有什么区别了。而bean的定义以及bean相互间的依赖关系将通过配置元数据来描述。
(2)Bean的作用域:
(3)生命周期
Bean实例生命周期的执行过程如下:
Spring对bean进行实例化,默认bean是单例;
Spring对bean进行依赖注入;
如果bean实现了BeanNameAware接口,spring将bean的id传给setBeanName()方法;
如果bean实现了BeanFactoryAware接口,spring将调用setBeanFactory方法,将BeanFactory实例传进来;
如果bean实现了ApplicationContextAware接口,它的setApplicationContext()方法将被调用,将应用上下文的引用传入到bean中;
如果bean实现了BeanPostProcessor接口,它的postProcessBeforeInitialization方法将被调用;
如果bean实现了InitializingBean接口,spring将调用它的afterPropertiesSet接口方法,类似的如果bean使用了init-method属性声明了初始化方法,该方法也会被调用;
如果bean实现了BeanPostProcessor接口,它的postProcessAfterInitialization接口方法将被调用;
此时bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用上下文中,直到该应用上下文被销毁;
若bean实现了DisposableBean接口,spring将调用它的distroy()接口方法。同样的,如果bean使用了destroy-method属性声明了销毁方法,则该方法被调用;
三、Spring AOP理解
(1)代理模式–动态代理是一种符合AOP设计思想的技术https://blog.csdn.net/fangqun663775/article/details/78960545
a、静态代理
b、动态代理
(2)什么是AOP:aop是一种编程思想,它是对oop的一种补充和完善。aop将软件系统分为两部分核心关注点和横切关注点,横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处都基本相似。比如权限认证、日志、事务处理。Aop 的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。
(3)AOP使用场景:AOP用来封装横切关注点,具体可以在下面的场景中使用:
Authentication 权限
Caching 缓存
Context passing 内容传递
Error handling 错误处理
Lazy loading 懒加载
Debugging 调试
logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Performance optimization 性能优化
Persistence 持久化
Resource pooling 资源池
Synchronization 同步
Transactions 事务
(4)原理分析–https://blog.csdn.net/yuexianchang/article/details/77018603
AOP代理对象的生成是由AopProxyFactory根据AdvisedSupport对象的配置来决定,默认情况下如果目标对象是接口则是jdk实现,否则就是cglib生成代理。代理对象生成后,切面是如何织入?InvocationHandler是JDK动态代理的核心,如果是jdk实现的动态代理我们可以看见JdkDynamicAopProxy实现了InvocationHandler接口,生成的代理对象的方法调用都会委托到InvocationHandler.invoke()方法。通过invoke()方法实现织入。
四、spring 事务