Spring
- 什么是SpringIOC 控制反转
- 优点
- SpringCore 最核心的部分
- 控制反转是降低对象之间耦合关系的思想,一般来说就是上层调用下层,上层依赖下层,调用者依赖被调用者!
- 通过Ioc 可以提高系统的可扩展性,通过IOc容器开发人员就不用关注对象如何被创建的1
- 缺点
- 对象是通过反射创建出来对程序的性能有点影响
- 创建对象的流程变得复杂
- 什么是DI
- 依赖注入自身对象中的内置对象是通过注入的方式进行创建
- Ioc是一种软件设计思想 di就是设计思想的具体实现
- IOC DI DL 的关系
- image-20190602112438074
- 依赖注入的方式
- setter(set方法)
- Interface (接口)
- Constructor (基于构照函数)
- Annotation (基于java注解)
- image-20190602112722935
- IOC 容器的优势
- 避免各处new 对象实例 并且可以做到统一维护
- SpringIOC 支持哪些功能
- 依赖注入
- 依赖检查
- 自动装配
- 支持集合
- 初始化方法和销毁方法
- 支持回调方法
- 什么是Aop
- Aop 面向切面编程 是面向对象的一种扩展补充
- 它允许在不改变原来业务逻辑的基础上可以动态增强
- SpringAop
- image-20190602120140099
- SpringAop 通知类型
- image-20190602120215198
- SpringBean 的有哪几种作用域
- Singleton:单例模式
- Spring IoC 容器中只会存在一个共享的 Bean 实例,无论有多少个 Bean 引用它,始终指向同一对象。该模式在多线程下是不安全的。Singleton 作用域是 Spring 中的缺省作用域,也可以显示的将 Bean 定义为 singleton 模式,配置为:
- Prototype :原型模式
- 每次通过 Spring 容器获取 prototype 定义的 bean 时,容器都将创建
- 一个新的 Bean 实例,每个 Bean 实例都有自己的属性和状态,而 singleton 全局只有一个对
- 象。根据经验,对有状态的 bean 使用 prototype 作用域,而对无状态的 bean 使用 singleton
- 作用域。
- Request :一次request 一个实例
- 在一次 Http 请求中,容器会返回该 Bean 的同一实例。而对不同的 Http 请求则会产生新的 Bean,而且该 bean 仅在当前 Http Request 内有效,当前 Http 请求结束,该 bean
- 实例也将会被销毁
- session :sessiom
- 在一次 Http Session 中,容器会返回该 Bean 的同一实例。而对不同的 Session 请求则会创建新的实例,该 bean 实例仅在当前 Session 内有效
- global Session :
- 在一个全局的 Http Session 中,容器会返回该 Bean 的同一个实例,仅在
- 使用 portlet context 时有效
- SpringBean 的生命周期
- 实例化一个Bean
- 按照 Spring 上下文对实例化的 Bean 进行配置,也就是 IOC 注入。
- 如果这个 Bean 已经实现了 BeanNameAware 接口,会调用它实现的 setBeanName(String) 方法,此处传递的就是 Spring 配置文件中 Bean 的 id 值
- 如果这个 Bean 已经实现了 BeanFactoryAware 接口,会调用它实现的 setBeanFactory,setBeanFactory(BeanFactory)传递的是 Spring 工厂自身(可以用这个方式来获取其它 Bean,只需在 Spring 配置文件中配置一个普通的 Bean 就可以)
- 如果这个 Bean 已经实现了 ApplicationContextAware 接口,会调用
- setApplicationContext(ApplicationContext)方法,传入 Spring 上下文(同样这个方式也
- 可以实现步骤 4 的内容,但比 4 更好,因为 ApplicationContext 是 BeanFactory 的子接口,有更多的实现方法)
- 如果这个 Bean 关联了 BeanPostProcessor 接口,将会调用
- postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor 经常被用作是 Bean 内容的更改,并且由于这个是在 Bean 初始化结束时调用那个的方法也可以被应用于内存或缓存技术。
- 如果 Bean 在 Spring 配置文件中配置了 init-method 属性会自动调用其配置的初始化方法。
- 如果这个 Bean 关联了 BeanPostProcessor 接口,将会调用
- postProcessAfterInitialization(Object obj, String s)方法。
- 注:以上工作完成以后就可以应用这个 Bean 了,那这个 Bean 是一个 Singleton 的,所以一般情况下我们调用同一个 id 的 Bean 会是在内容地址相同的实例,当然在 Spring 配置文件中也可以配置非 Singleton。
- 当 Bean 不再需要时,会经过清理阶段,如果 Bean 实现了 DisposableBean 这个接口,会调 用那个其实现的 destroy()方法;
- 最后,如果这个 Bean 的 Spring 配置中配置了 destroy-method 属性,会自动调用其配置的 销毁方法。
- SpringMVC 的运行流程
- 用户通过浏览器发送请求到DispatherServlet 控制器
- 如果配置了拦截器 先通过拦截器的处理 只要返回True 才能运行以下步骤
- 控制器通过请求到HandleMapper 映射器 中寻找具体处理器
- 如果拦截器中设置了前置方法先调用拦截器的前置方法
- HanMapper 映射器 在通过具体的适配器去调用处理器
- 如果拦截器中设置了处理后置方法先调用拦截器的后置方法
- 通过适配器调用的映射器返回ModelAndView 视图再通过执行链返回到DispatherServlet中
- DispatherServlet 控制器将视图传给ViewResolver视图解析器解析
- ViewResolver 视图解析器解析完毕返回一个完整的视图给DispatherServlet 控制器
- DispatherServlet 控制器 拿到完整的视图渲染后响应给用户
- MVC 有哪些常用注解
- 在方法上的注解
- @ResponseBody 异步请求 在方法上
- @RequesMapping 处理请求映射路径的注解 在方法上
- @AuToWired 对成员变量 方法以及构造函数进行标注,完成自动配置的工作
- @pathvariable 用去取出URL 中传入的参数
- @requestParam 用于SpringMVC 后台获取获取参数 和request.getParment(“”);x相同效果
- 在类上注解
- @Controller 加入spring容器中 标志位控制层组件
- @RestController 相当于resonseBody 和Controller 组合注解 表示将所有的控制器返回值转换为Json 数据
- @Service 用于标注业务层
- @Repository 用于注解Dao层 在Dao 的实现类上注解
- @Component 泛指组件 当组件不好归类的时候使用