spring:
IOC控制反转: 就是对象的控制权不由当前对象管理了,而是由IOC容器管理;
AOP面向切面编程: 就是通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术;
简单来说就是统一处理某一"切面"(类)的问题的编程思想,比如统一处理日志,统一异常处理等;
AOP五种通知方式:
1.前置增强 @before
2.后置增强 @After
3.环绕增强 @Around
4.返回后通知 @AfterReturning
5.异常增强 @AfterThrowing
Spring常用的依赖注入方式:
1.setter属性注入
2.构造方法注入
3.注解
Spring常用的注解:
@Component @controller @service @Repository @Autowired @configuration @Bean
Spring中bean是线程安全的吗?
Spring中bean默认是单例模式,实际中大部分时候spring bean是无状态的,所以某种程序上来说bean也是安全的,但如果bean有状态的话,就需要开发者自己保证线程安全了,就简单的就是改变bean的作用域,把单例模式(singleton)改为非单例模式,从容器每次获取bean的时候都会创建一个新的示例,即每次getBean()相当于new Bean()操作;
Spring bean的生命周期: 4个阶段和多个拓展点
1.实例化 Instantiation
2.属性赋值 Populate InstantiationAwareBeanPostProcess方法对属性值就行修改
3.初始化 Initialization
4.销毁 Destruction
有8个后置处理方法和4个后置处理器的类贯穿在对象的实例化,赋值,初始化,和销毁的过程中; 像ApplicationContextAware就是当应用程序定义的Bean实现ApplicationXontextAware接口时注入ApplicationContext对象;
如何获取一个bean: 6个方法
1.在初始化时保存ApplicationContext对象获取
2.通过spring提供的utils类获取ApplicationContext对象获取
3.实现接口ApplicationContextAware获取
4.通过Spring提供的ContextLoader获取
Spring用到的设计模式:
代理模式: aop
单例模式: spring配置文件中定义的bean默认单例模式
工厂模式: BeanFactory用来创建对象就是工厂模式
模板模式: 例如RestTemplate
Spring事务实现方式:
声明式事务: 基于xml配置文件的方式和注解的方式(在类上添加@Transaction)实现
编码方式: 提供编码的形式管理和维护事务
spring事务失效的几种情况?
1.数据库使用的存储引擎就不支持事务
2.没有被spring管理 就是没有被spring管理我们的bean
3.方法不是public的 spring官方定义只有@Transactional用于public的方法上事务才会生效
4.自身调用问题也会导致事务不生效 就是带有一个带事务或者不带事务的方法调用自己的所在类的其他方法,事务就不会生效,因为没有经过Spring的代理类,默认只有在外部调用事务才会生效;
5.异常被吃了,就是异常被捕获了,不抛出来,事务就不会回滚;
6.异常的抛出的类型错误也不会回滚
spring循环依赖解决方案: 循环依赖是指多个bean之间互相引用,bean之间形成一个依赖环;
spring可以解决单例bean之间的循环依赖,是依靠三个集合,三级缓存解决的;
springMVC:
springmvc组件:
1.前端控制器 DispatcherServlet
2.处理器映射器 HandlerMapping
3.处理器 Controller
4.模型与视图 ModelAndView
5.视图解析器 ViewResolver
springmvc执行流程:
springMVC会先把请求发送给前端控制器DispatcherServlet,前端控制器查询一个或多个HandlerMapping映射处理器,找到处理请求的Controller,前端控制器会再把请求提交给对应的Controller处理器,Controller进行业务逻辑处理后,返回一个ModelAndView模型与视图,前端控制器Dispatcher会查询一个或多个视图解析器ViewResolver,找到ModelAndView模型和视图对象指定的视图对象,视图对象负责渲染给客户端;
springMVC拦截器:
与过滤器的区别: 1.过滤器可以拦截所有内容,拦截器是springMVC的,只有使用了springmvc才可以使用,并且只能拦截控制器Controller的方法,如JSP,html不能拦截
2.拦截器是基于java的反射机制,过滤器是基于函数回调的, 过滤器的执行顺序在拦截器 之前,
3.过滤主要是对URL做一些过滤,校验的操作,,拦截器更强大,能做的事情更多
Restful开发风格: 隐藏资源的访问行为,无法通过地址得知对资源是何种操作
post 新增和保存
put 修改
三种参数: 1.地址或者表单传参 @RequestParam
2.json参数 @RequestBody
3.路径参数 @Pathvariable
springMVC和springboot的区别:
springMVC主要是对web进行包装简化,springboot的主要功能是起步依赖和自动装配,简化了更多东西,省略了好多配置,还引入了起步类,不用操作tomcat;