spring随便记一下

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/nevergiveup12345/article/details/86608255

spring源码
参观工厂内部,学会找入口
IOC
1、定位资源(定位查找配置文件)
2、加载(已经找到配置文件)
3、注册(已经记载好配置文件解析出来,并封装成BeanDefintion)
对于bean的说明而已,bean还没真正的产生
spring中do开头的都是干活的
beanFactory和FactoryBean:
写在后面的是主语,
是由spring工厂生产出的bean,所以叫FactoryBean,不是你自己new出来的

依赖注入:
1、读取DeanDefinition中信息,获取其依赖关系
2、实例化(代理对象)
3、注入:设值
createBeanInstance,创建实例,放入IOC容器中
populateBean 注入方法
list,map,父类,接口
如果使用了演示,依赖注入这个动作发生在调用getBean方法的时候
启动的时候放在容器中,用的时候只要取就可以了

ClassPathApplication,本身就是一个工厂,这个是我们自己new出来的,就意味着,我们可能再多线程环境中使用
beanFactory针对于genBean的动作而言
FactoryBean是对bean进行管理以及维护,代理以后的实例
代理以后,相当于是把类名都改了。
Bean IOC 收到实现FactoryBean
BeanPostProcessor 有后置处理,也有前置处理
类似于模板模式(有一部分自己实现,得到一个回调)
为了AOP的实现做了铺垫,有了基础了
最核心的2个jar包:spring-bean,spring-context
spring-bean定义的是规范
spring-context 工厂的实现,DI的实现
core是最顶层的,所有的项目都要依赖
spring-aop是spring-aspect的上层建筑
定义接口
targetClass MethodInvoiker
从IOC中取得代理以后的对象,对每个方法进行重写
加入一些切面调用所需要的东西
do开头的方法都是具体干活的方法
AOP通知
触发器,tigger
主动调用(专门监听的定时器)
自动注入,注解编程@AutoWring
自动识别,自动转型
声明的是接口,自动找到该接口的实现类(前提是接口只有一个实现类)
根据BeanId来自动装配
spring的单例是用map实现的,一定要保证线程安全,spring中默认都是单例,除非手动声明scope,Prototype:每get一次,就new一个
spring IOC中,判断,如果被代理的类实现了接口,么默认用jdk代理,如果被代理的对象没有实现任何接口,那就默认使用cglib
springAOP如何制定规则?
一个切面,就代表着N个bean的一个集合
这N个bean他们都拥有共同点,所以他们组成一个切面
事务管理的时候,就用到了切面的定义
切面在代码中比较抽象
bean切面是可以交叉的
归类了
在切面中bean他们之间的关联点
事物管理为例
异常可以自定义,只会监听sql异常
利用了IOC中的后置处理
切点:
方法拦截器,这是在AOP里独有的
在切面中,耨一个具体的bean中的某一个具体的方法
目标对象:
先包名再类名,再找方法
AOP代理:
jdk的proxy,CGLIB
持有被代理对象的引用,在调用被代理对象的方法时,在调用之前加点东西,在调用之后加点东西,中间就用我们自己保存的对象引用去调用具体方法
目标对象就是代理对象所持有的引用
通知机制:
前置后置使用了模板方法模式
在这里插入图片描述

APO编程,spring帮我们实现了完全解耦
通知机制的设计,完美解决 了代码的耦合问题
事件机制。先注册后触发

猜你喜欢

转载自blog.csdn.net/nevergiveup12345/article/details/86608255