一、SpringBoot
1)、SpringBoot特点
- 创建独立的Spring应用程序
- 嵌入Tomcat,无需部署WAR文件
- 简化Maven配置
- 自动配置Spring
- 提供生产就绪型功能,如指标、健康检查和外部配置
- 绝对没有代码生成和对XML没有要求配置
2)、SpringBoot自动配置
@SpringBootApplication是SpringBoot启动类配置,是一个组合注解。SpringBoot启动时通过@EnableAutoConfiguration注解找到META-INF/spring.factories配置文件中的所有自动配置类,并对其进行加载。这些自动配置类可以通过以Properties结尾命名的类中取得在全局配置文件配置的属性,xxxxProperties类是通过@ConfigurationProperties注解与全局配置文件对应的属性进行绑定的。
二、Spring
1)、springAOP
SpringAOP的核心思想是将应用程序中的商业逻辑与对其提供支持的通用服务相分离。实现原理是动态代理,分别由JDK动态代理和CGLIB动态代理。
JDK动态代理是只提供接口代理。InvocationHandler通过invoke()方法反射来调用目标类中的代码,Proxy利用InvacationHandle动态地创建一个符合某一接口的实例,生成目标类代理对象。
CGLIB动态代理是通过使用asm.jar直接操纵字节码实现的。CGLIB在动态运行时动态生成指定类的一个子类对象,并覆盖其中特定方法添加增强代码,从而实现AOP。
2)、SpringIOC
SpringIOC指控制反转,由IOC容器负责实例化、定位、配置应用程序中的对象即对象间的依赖。实现原理是通过反射机制+XML技术实现的。需要传入完整的包和类名。
3)、BeanFactory 和 ApplicationContext
BeanFactory和ApplicationContext是Spring的两大核心接口,均可以当做spring容器。其中ApplicationContext是BeanFactory的子接口,提供了更完整的功能框架。
BeanFactory采用延迟加载bean,ApplicationContext容器启动时,一次性创建所有的bean。
BeanFactory、ApplicationContext都支持beanPostProcessor、BeanFactoryPostProcessor,但区别是BeanFactory需要手动注册,ApplicationContext自动注册。
4)、SpringBean生命周期
- bean实例化
- bean属性注入
- 调用BeanNameAware接口的setBeanName()方法
- 调用BeanFactoryAware接口的setBeanFactory()方法
- 调用ApplicationContextAware接口的setApplicationContext()方法
- 调用BeanPostProcessor接口的postProcessBeforeInitialization()方法
- 调用InitializingBean接口的afterPropertiesSet()方法,init-method
- 调用BeanPostProcessor接口的postProcessAfterInitialization()方法
- 调用DisposableBean接口的destory()方法
- 调用自定义的销毁方法。destory-method
5)、BeanFactory和FactoryBean区别
FactoryBean:是个Bean,能生产和修饰对象生成的工厂Bean。
BeanFactory:IOC容器或对象工厂,管理所有的Bean。
三、SpringMVC
1)、SpringMVC请求过程
- 浏览器发送请求到DispatcherServlet
- DispatcherServlet调用HandlerMapping找到对应的handler
- DispatcherServlet再调用HandlerAdapter根据handle找到对应的control
- control进行业务处理,并返回ModelAndView
- DispatcherServlet调用viewResoler解析ModelAndView,并对其进行渲染
- DispatcherServlet将结果返回给浏览器
四、Mybatis
1)、Mybatis工作流程
- mybatis应用程序通过SqlSessionFactoryBuilder从mybatis-config.xml配置文件中构建出SqlSessionFactory。
- SqlSessionFactory的实例直接开启一个SqlSession。
- SqlSession实例获得Mapper对象并允许Mapper映射的SQL语句,完成对数据库的CRUD和事务提交之后关闭SqlSession。