目录
1、AOP的代理模式
实质是通过对具体类的代理的增强(前置、后置、环绕、最终、异常、引入)进而实现对具体类的功能的增强。
2、循环依赖
概念:多个bean之间相互依赖,形成一个闭环;
解决办法:构造器的循环依赖:抛出异常
单例模式下的setter循环依赖:通过三级缓存处理循环依赖
其他模式:无法处理
3、spring装配bean的方式
·自动化装配bean
·在java中显式配置装配bean
·在xml进行显式配置装配bean
·基于注解的装配
4、spring中使用到的设计模式
·单例模式(所有bean默认都是单例的)
·工厂模式(通过beanfactory和ApplicationContext来创建bean对象)
·代理模式(AOP的实现就是通过代理模式来实现)
·模板方法模式(Spring的jdbcTemplate和hibernateTemplate 等以Template结尾的对数据库操作的类,他就使用到了模板方式)
·包装器设计模式(连接多个数据库,根据用户不同的需求切换不同的数据源)
·观察者模式(定义对象间一对多的依赖关系,当一个对象状态发生改变时,所有依赖他的对象都会得到通知被自动更新)
·适配器模式(AOP的增强或通知使用到了适配器模式,Spring MVC也用到了适配器模式适配Controller)
5、Spring支持的事务管理
·声明式事务(配置文件中配置;推荐)
·编程式事务(在代码中硬编码,获取事务状态;不推荐)
6、Spring的事务隔离级别
这也是数据库的事务隔离级别
未提交读、已提交读、可重复读、可串行化
7、bean的线程安全问题
bean本身不是线程安全的,且Spring容器未提供bean的线程安全策略。对于原型bean,每次创建一个bean,不存在数据共享。对于单例bean,所有线程共享一个单例实例bean,但却是无状态的,不会执行查询以外的操作,只关注方法本身。
8、SpringBoot的自动装配原理
概括:通过注解或者一些简单的配置就能在SpringBoot的帮助下实现某块功能;
自动装配的步骤:
·基于java代码的Bean配置
·自动配置条件依赖
·Bean参数获取
·Bean的发现(从所有jar包中读取META-INF/spring.factories文件)
·Bean的加载(加载到spring容器进行管理)
个人理解:SpringBoot通过@EnableAutoConfiguration开启自动配置,加载spring.factories中注册的各种AutoConfiguration类,当某个AutoConfiguration类满足其生效条件时,就会实例化该类并将其注入spring容器中,完成依赖框架的自动配置。
9、Mybatis 与 Hibernate 对比
·适用场景:Hibernate在使用简单的增删改查时性能更佳,而Mybatis更加灵活,在复杂的数据库操作时使用更好
·开发工作量:Hibernate只需自己关注业务流程,无需关注sql的生成;而Mybatis需要自己编写sql代码
·sql优化:Hibernate在代码更简洁,但sql代码不便修改(破坏其简洁性);而Mybatis是手动编写更容易自己调整
·对象管理:Hibernate有自己的一套完善方案;而Mybatis需要自己对对象进行详细的管理
·安全性:Hibernate有着数据库对应的异常处理机制;而Mysql需要开发者自己注意和处理
10、Mybatis的工作原理
·读取配置文件
·加载映射文件
·构建sqlSessionFactory会话工厂
·构建sqlSession会话对象
·Executor执行器根据SqlSession传递的参数动态的生成需要执行的SQL语句操作数据库