网站建设如何创业,电子商务网站规划书范文,wordpress 点赞函数,seo月薪Bean的生命周期
1.通过反射生成对象
2.填充Bean的属性
3.调用aware接口的invokeAwareMethod方法#xff0c;对BeanName、BeanFactory、BeanClassLoader对象的属性设值
4.调用BeanPostProcessor的前置处理方法#xff0c;其中使用较多的是ApplicationContextPostProcessor…Bean的生命周期
1.通过反射生成对象
2.填充Bean的属性
3.调用aware接口的invokeAwareMethod方法对BeanName、BeanFactory、BeanClassLoader对象的属性设值
4.调用BeanPostProcessor的前置处理方法其中使用较多的是ApplicationContextPostProcessor设置ApplicationContext、Environment、ResourceLoader、EmbeddValueResolver等对象
5.调用initmethod方法invokeInitmethod()判断是否实现了initializingBean接口如果有则调用afterPropertiesSet方法没有就不调用
6.调用BeanPostProcessor的后置处理方法Spring的AOP就是在这里实现的
7.通过getBean获取完整的对象
8.进入销毁流程判断是否实现了DispoableBean接口然后调用destroyMethod方法
Spring是如何解决循环依赖问题的
三级缓存、提前暴露对象、aop
所有的Bean对象在创建的时候首先放进三级缓存中在后续的使用过程中如果需要被代理则返回代理对象如果不需要被代理则直接返回普通对象。
缓存的放置时间和删除时间
三级缓存createBeanInstance之后
二级缓存第一次从三级缓存中确定对象是代理对象还是普通对象之后删除三级缓存
一级缓存生成完整对象之后放到一级缓存删除二三级缓存
Bean Factory和FactoryBean有什么区别
相同点都是用来创建Bean对象的
不同点如果使用BeanFactory创建对象必须遵守spring的生命周期此过程很复杂。如果只是想简单的创建一个Bean同时交于Spring进行管理可使用FactoryBean来创建
isSingleton是否是单例对象
getObjectType获取返回对象的类型
getObject自定义创建对象的过程(new反射动态代理)
Spring中用到哪些设计模式
1.工厂模式BeanFactory就是工厂模式
2.单例模式Bean默认都是单例的
3.模板方法postProcessBeanFactory、onRefresh、initPropertyValue
4.原型模式指定作用域为prototype
5.策略模式XmlBeanDefinitionReader、PropertiesBeanDefinitionReader
6.观察者模式listener、event、multicast
7.适配器模式Adapter
8.装饰者模式BeanWrapper
9.责任链模式使用aop的时候会先生成一个拦截器链
10.代理模式动态代理
11.委托者模式delegate
…
SpringAOP的底层实现原理
动态代理
先有IOC后有AOPAOP是对Bean的扩展实现所以在BeanPostProcessor后置处理方法中来实现的。
1.代理对象的创建过程advice、切面、切点
2.通过jdk或者cglib的方式来生成代理对象
3.在执行方法调用的时候会调用到生成的字节码文件中直接会找到DynamicAdvisoredlnterceptor类中的intercept方法从此方法开始执行
4.根据之前定义好的通知来生成拦截器链
5.从拦截器链中依次获取每一个通知开始进行执行
Spring的事务是如何回滚的
spring的事务是由aop来实现的首先要生成具体的代理对象然后按照aop的执行流程来执行具体的操作逻辑正常情况下要通过通知来完成核心功能但事务不是通过通知来实现的而是通过TransactionInterceptor来实现的调用invoke来实现具体的逻辑。
1.先做准备工作解析各个方法上事务相关属性根据具体的属性判断是否开启新事务
2.当需要开启的时候获取数据库链接关闭自动提交功能开启事务
3.执行具体的sql逻辑操作
4.在操作过程中如果执行失败了会通过completeTransactionAfterThrowing来完成事务的回滚操作回滚的具体逻辑是通过doRollBack方法来实现的实现的时候也是要先获取链接对象通过链接对象来回滚
5.如果执行过程中没有任何意外情况的发生那么通过commitTransactionAfterReturning来完成事务的提交操作提交的具体逻辑是通过doCommit方法来实现的实现的时候也是要获取链接通过链接对象来提交
6.当事务执行完毕之后需要清除相关的事务信息cleanupTransactionInfo
spring事务传播特性
spring的事务传播特性有7种
1.Required
2.Requires_new
3.nested
4.Support
5.Not_Support
6.Never
7.Mandatory
某一个事务嵌套另一个事务的时候怎么办A方法调用B方法AB方法都有事务但是传播性不同那么A如果有异常B怎么办B如果有异常A怎么办
事务的传播特性指的是不同方法的嵌套调用过程中事务应该如何进行处理是用同一个事务还是不同的事务当出现异常的时候是回滚还是提交两个方法之间相关影响在日常工作中使用较多的是required、Requires_new、nested
事务可以分为三类支持当前事务、不支持当前事务、嵌套事务
核心处理逻辑
1.判断内外方法是否为同一个事务
是异常统一在外层方法处理
不是内层方法有可能影响到外层方法但是外层方法是不会影响到内层方法的
SpringIOC的底层实现
反射、工厂、设计模式
1.先通过createBeanFactory创建Bean工厂
2.循环创建Bean对象因为容器都是单例的所以优先通过getBean、doGetBan从容器中查找找不到的话
3.通过createBean、doCreateBean方法通过反射的方式创建对象一般情况下使用的是无参的构造方法
4.进行对象额属性填充populateBean
5.进行其他初始化操作initializingBean
ApplicationContext和BeanFactory有什么区别
1.BeanFactory创建bean采用延迟加载形式也就是说你需要getBean()才会加载
2.ApplicationContext创建Bean默认采用立即加载ApplicationContext继承了BeanFactory
如何控制Bean的加载顺序
使用DependsOn即可控制Bean的加载顺序
配置在方法上将优先于Bean配置的bean进行加载配置在类上将优先于当前类中所有Bean配置的Bean进行加载配置在类上将优先于Compent等配置的Bean进行加载相关属性value默认设置当前bean所依赖的bean的id