浙江龙元建设集团 网站,企业做推广有用吗,中国建设网官方,外贸seo是啥Spring框架
1. BeanFactory和ApplicationContext有何区别
BeanFactory是Spring最底层的接口#xff0c;是IoC的核心#xff0c;定义IoC的基本功能。
BeanFactory具有#xff1a;延迟实例化的特性。在启动的时候#xff0c;不会实例化Bean#xff0c;只有有需要从容器…Spring框架
1. BeanFactory和ApplicationContext有何区别
BeanFactory是Spring最底层的接口是IoC的核心定义IoC的基本功能。
BeanFactory具有延迟实例化的特性。在启动的时候不会实例化Bean只有有需要从容器中获取Bean才会实例化Bean。一般用在移动设备等内存较小的地方
ApplicationContext是BeanFactory子接口相较于BeanFactory多提供国际化、资源访问、AOP等功能。
ApplicationContext在启动的时候会实例化所有Bean可以为Bean配置Lazy-init实现延迟实例化。
2. Spring Bean的生命周期
一、加载Bean定义
1、loadBeanDefinitions:将Bean定义记录在beanDefinitionMap中 registerBeanDefinition类- registerBeanDefinition()方法 二、创建Bean对象
1、构建对象
通过遍历对对象进行逐个构造。 AbstractAutowireCapableBeanFactory类-createBeanInstance() 2、填充属性 populateBean() 3、初始化 initializeBean() 3.1applyBeanPostProcessorsBeforeInitialization()初始化前应用Bean后置处理器
3.2invokeInitMethods()初始化
3.3applyBeanPostProcessorsAfterInitialization()初始化后应用Bean后置处理器
三、使用
初始化完成后的Bean对象即可正常使用。
四、销毁
1、销毁前
PreDestory注解的方法
2、销毁
DisposableBean-destory()
Bean-destory-method()
3. Spring IOC如何实现
IoCInversion of Control 控制反转。 通俗易懂的理解我们拥有创建对象的控制能力反转为由程序进行创建对象不在由我们去创建对象。 IoC有多种实现方式其中最常见的DI(Dependency Injection 依赖注入)。对象通过构造方法参数、工厂方法参数、构造或工厂方法返回后在对象实例上设置的属性来定义它们的依赖项从类外部注入依赖容器在创建bean时注入这些依赖项。
Spring常见依赖注入有3种方式1、构造方法 2、set 3、注解注入Autowired
Spring提供了两种IoC容器
1、BeanFactory
2、ApplicationContext 具体可参考 面试题1 在了解了Spring Bean的生命周期后我们能够发现Bean对象的创建已经不是由我们手动创建了而是通过Spring底层的组件进行加载-创建-销毁这一过程就是Spring IoC的过程。
4. 说说Spring AOP及实现原理
4.1 AOP概念
AOPAspect Orient Programming 面向切面编程。
目的在不修改源代码的情况下实现添加额外功能的技术。
个人理解源代码为一颗笔直的树需要在这棵树上看到更多的种类在树旁重新栽显然耗时费力此时通过嫁接技术在树的切面嫁 接即可实现目的。AOP
4.2 AOP使用 具体使用可参考https://blog.csdn.net/Cr1556648487/article/details/126777903 4.3 AOP原理
SpringAOP底层采用动态代理支持JDK动态代理以及Cglib动态代理。
JDK动态代理只能为接口创建动态代理实例。需要获得被代理类的接口信息通过反射生成一个实现代理接口的动态代理类然后通过构造方法生成动态代理类的实例对象在调用具体方法前使用invokeHandler()处理。
Cglib动态代理以来asm包把被代理类的字节码加载进来生成其子类。
5. 动态代理cglib与JDK
JDK动态代理
通过实现InvocationHandler接口的invoke()方法定义切面逻辑。
使用条件
1、业务目标对象只能为接口创建代理实例2、拦截器实现InvocationHandler3、通过Proxy.newProxyInstance()生成代理对象
Cglib动态代理
基于ASM字节码生成库允许在运行时对字节码修改和动态生成。
JDK动态代理与Cglib动态代理区别 JDK动态代理只针对接口实现类进行代理。也就是只面向接口。 Cglib针对类实现代理采用的是继承方法。
6. Spring事务实现方式 编程式事务 概念在业务代码中精确定义事务边界 代码块中调用beginTransaction()、commit()、rollback()等相关方法 声明式事务 有助于用户将操作与事务规则进行解耦。简单地说编程式事务侵入到了业务代码里面但是提供了更加详细的事务管理而声明式事务由于基于AOP所以既能起到事务管理的作用又可以不影响业务代码的具体实现。
使用
EnableTransactionManagement开启事务管理
Transactional开启事务
Transactional事务注解失效原因
方法修饰符不为public方法内部调用事务事务内捕获异常未抛出新异常rollbackFor属性配置错误
7. Spring事务的底层原理
使用事务步骤
获取数据库连接开启事务执行数据操作提交事务/回滚事务关闭连接
Spring在框架中做了开启事务、提交事务、回滚事务的操作使得业务代码和事务代码解耦。这一功能是基于AOP实现的。
8. 自定义注解实现功能 参考https://www.jianshu.com/p/7c2948f64b1c 9. SpringMVC运行流程 核心代码DispatcherServlet.java - doDispatch() 用户请求DispatcherServlet中央调度器通过请求查找HandlerMapping获取HandlerDispatcherServlet中央调度器通过Handler查找HandlerAdapeter处理器适配器调用用户编写的controller返回ModelAndView基于JSON交互的返回ModelAndView为空此时前端已能接收到返回值DispatcherServlet中央调度器通过ModelAndView查找对应ViewResolver返回View渲染View返回渲染后的View
10. SpringMVC启动流程 详情查看https://blog.51cto.com/u_9587581/2398187 11. Spring的单例实现
Spring的单例模式是采用单例注册表实现的。
private final MapString, Object singletonObjects new ConcurrentHashMapString, Object(256);
private final MapString, Object earlySingletonObjects new ConcurrentHashMapString, Object(16);
private final MapString, ObjectFactory? singletonFactories new HashMapString, ObjectFactory?(16);//Spring获取单例模式方法
protected Object getSingleton(String beanName, boolean allowEarlyReference) {Object singletonObject this.singletonObjects.get(beanName);if (singletonObject null isSingletonCurrentlyInCreation(beanName)) {singletonObject this.earlySingletonObjects.get(beanName);if (singletonObject null allowEarlyReference) {synchronized (this.singletonObjects) {singletonObject this.singletonObjects.get(beanName);if (singletonObject null) {singletonObject this.earlySingletonObjects.get(beanName);if (singletonObject null) {ObjectFactory? singletonFactory this.singletonFactories.get(beanName);if (singletonFactory ! null) {singletonObject singletonFactory.getObject();this.earlySingletonObjects.put(beanName, singletonObject);this.singletonFactories.remove(beanName);}}}}}}return singletonObject;}这里有3个Map集合singletonObjects、earlySingletonObjects、singletonFactories
单例获取顺序为singletonObjects - earlySingletonObjects - singletonFactories
singleonObjects单例对象的cacheearlySingletonObjects提前曝光的单例对象的cachesingletonFactories单例对象工厂的cache
12. Spring中使用了哪些设计模式
1、工厂模式BeanFactory、ApplicationContext
2、单例模式Bean默认为单例模式
3、代理模式AOP功能用到了JDK动态代理和Cglib动态代理
4、适配器模式Spring AOP 的拦截器使用到了适配器模式