ioc

依赖注入:通过注入的方式实例化对象,不再直接new对象了,交给spring容器进行管理和维护

控制反转:实例化对象的控制权交给了spring容器,而不再是某个单独的类,控制权发生了变更

作用:解耦,把类和类之间的关系统一交给ioc容器进行维护管理,同时将类注入到需要的类钟,也就是类的使用者只负责使用而不需要进行维护,ioc容器维护对象的生命周期和对象之间的相互作用

实现原理:

  •   初始化ioc容器
  •   读取配置文件
  •   解析配置文件,把配置信息转化为ioc容器能够识别的数据结构
  •   按照数据结构依次实例化成相应的Java对象
  •   注入对象之间的依赖关系

不同类型的IOC(依赖注入)方式:

  • 构造器依赖注入:构造器依赖注入通过容器触发一个类的构造器来实现的,该类有一系列参数,每个参数代表一个对其他类的依赖。
  • Setter方法注入:Setter方法注入是容器通过调用无参构造器或无参static工厂 方法实例化bean之后,调用该bean的setter方法,即实现了基于setter的依赖注入。

    @autowire是一个自动配装方式,默认提供了set方法,使用setter注入(默认使用的是byType的方式,如果接口有多个实现类,就会抛出异常,解决方案1,变量名改为他的实现类,2,@Qualifier(value = "userService2")配合使用

给Spring 容器注册元数据:

  • XML配置文件。(需要提供setter方法)(然后在xml下面写<constructor-arg> <property>调用他的方法)
  • 基于注解的配置。@Component@Controller@Service@Repository(不需要提供setter方法)
  • 基于java的配置。(需要提供setter方法)(在Java代码上写,setXXX的)

上面内容可以总结为注册和注入:以前都是再xml文档下进行,现在允许用注解在容器上注册,也允许自动配置@autowire这些代替set和构造函数

作用域:

  • singleton(容器启动之后 所有的单利就被预实例化 并缓存了

    当一个bean的作用域为singleton, 那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。

  • prototype

    Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean() 方法)时都会创建一个新的bean实例。根据经验,对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用 singleton作用域

  • request

    在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例, 它们依据某个bean定义创建而成。该作用 域仅在基于web的Spring ApplicationContext情形下有效。

  • session

    在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。

  • global session

    在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于 web的Spring ApplicationContext情形下有效。

aop

  好处:

  • 通过引入代理对象的方式来间接访问目标对象
  • 降低耦合,不必再目标对象直接修改业务

  实现原理:

  •   两个类和一个接口,一个统一的接口,目标对象,代理对象
  •   接口:目标对象和代理对象都要实现这个接口的方法,这个接口定义了目标对象和代理对象都需要完成的事
  •   目标对象:负责实现真正的业务
  •   代理对象:利用Java的反射技术 invoke 方法来进行调用。代理了目标对象的真实业务,而且可以再调用前后加上权限校验,日志,时间统计等功能
  •   例子:一个卖毛巾的接口,目标对象是制作毛巾的工厂,代理对象是一个百货超市,他们都实现了买毛巾这个接口,都可以进行卖毛巾这个动作,目标对象毛巾工厂核心方法就是卖毛巾业务,代理对象百货超市代理卖毛巾这个动作的同时,可以再前后加上一些促销活动,和售后服务等。

springmvc

  •   发送请求——>DispatcherServlet进行拦截,截获这个请求
  •   根据@controller注解注册到spring的类,找到合适HandlerMapping 处理映射器,从而将请求映射到处理器,这相当于一种策略模式,去选择合适的策略
  •   选择一个合适的HandlerAdapter去执行返回的handle,此时将开始执行拦截器的preHandler,给handle上的参数通过反射入参
  •   handle过程完了向前端控制器,返回一个ModelAndView对象,最后model再渲染到view,解析成真正的视图(jsp)
  •   也可以实现前后端分离,添加注解@Responsebody,通过fashjson解析成json串返回给前端

spring答题的更多相关文章

  1. SSH网上答题系统质量属性

    我要做的事网上答题系统,通过注册登录到答题页面. 这其中数据库的连接靠Hibernate,数据库的增删改查用Sruts2实现. 关于Struts2的学习,仅仅在action的表面上,可以在action ...

  2. Spring计划

    团队: 郭志豪:http://www.cnblogs.com/gzh13692021053/ 杨子健:http://www.cnblogs.com/yzj666/ 刘森松:http://www.cnb ...

  3. Spring面试题汇总

    一.Spring最核心的功能是什么?使用Spring框架的最核心的原因是什么? Spring 框架中核心组件有三个:Core.Context 和 Beans.其中最核心的组件就是Beans, Spri ...

  4. Spring第五天

    1. [简答题]:简述一下hibernate和spring框架的整合步骤: 答: 1.加入hibernate jar包 2.编写持久化类 3.添加Hibernate的配置文件:hibernate.cf ...

  5. Java面试题大全(javaSe,HTML,CSS,js,Spring框架等)

    目录 1. Java基础部分 7 1.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制? 7 2.Java有没有goto? 7 3.说说&和& ...

  6. 什么是JavaEE,什么是Spring

    作者:大宽宽链接:https://www.zhihu.com/question/268742981/answer/341770209来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  7. Spring的一些基本概念(面试备用哦)

    1.什么是Spring, 它有什么特点? 包括哪些内容? Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架. ◆  轻量——从大小与开销两方面而言Spring都是轻量的.完整 ...

  8. java面试记录二:spring加载流程、springmvc请求流程、spring事务失效、synchronized和volatile、JMM和JVM模型、二分查找的实现、垃圾收集器、控制台顺序打印ABC的三种线程实现

    注:部分答案引用网络文章 简答题 1.Spring项目启动后的加载流程 (1)使用spring框架的web项目,在tomcat下,是根据web.xml来启动的.web.xml中负责配置启动spring ...

  9. Java后端使用socketio,实现小程序答题pk功能

    在使用socket.io跟前端通信过程中,出现了一系列问题,现做下记录. 一.功能需求是,在小程序端,用户可相互邀请,进入房间后进行答题PK.实现方法是,用户点击邀请好友,建立连接,查询当前是否有房间 ...

随机推荐

  1. ORACLE中使用DBMS_SQL获取动态SQL执行结果中的列名和值

    1.获取动态SQL中的列名及类型 DECLARE l_curid INTEGER; l_cnt NUMBER; l_desctab dbms_sql.desc_tab; l_sqltext ); BE ...

  2. 37. Sudoku Solver *HARD*

    Write a program to solve a Sudoku puzzle by filling the empty cells. Empty cells are indicated by th ...

  3. [Vue warn]: Invalid prop: custom validator check failed for prop "xxx".问题

    在用vue+ui框架(iview.elementui等)做项目,会遇到这种问题 这样的,点那都报错,千辛万苦的付出,却找不到问题在哪 其实很简单,报错都显示出那个组件的问题了  ‘<Form&g ...

  4. 安装完DevExpress14.2.5,如何破解它呢?

    DevExpress是一个界面控件套件,提供了一系列的界面控件套件的DotNet界面控件.DevExpress开发的控件有很强的实力,不仅功能丰富,应用简单,而且界面华丽,更可方便订制,方便开发人员开 ...

  5. 072——VUE中vuex之使用mutations修改购物车仓库数据

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. httpclient 连接管理器

    连接操作器 连接操作是客户端的底层套接字或可以通过外部实体,通常称为连接操作的被操作的状态的连接. OperatedClientConnection接口扩展了HttpClientConnection接 ...

  7. How to understand three foundanmental faults?

    1.First ,try to understand "Green function and the moment tensor" in Seismology,9.1 2.seco ...

  8. mongodb添加延时节点

    1.      简介 延时节点是主节点过去某个时间点的“数据快照”,通常用来做数据备份,如果主节点有误操作而删除了数据,可以通过延时节点来恢复数据.例如,当前时间是10:00,并且延时节点设置1个小时 ...

  9. ZOJ3180 Number Game

    ZOJ3180 Number Game 要点: 判断后三个数字能否通过上述的变换过程 推出前三个数字 ,我们可以逆向思维考虑 也就是逆着推回去 如果符合后三个数字 或其变换一次的数字(即符合其中一种组 ...

  10. json数组和json字符串转换成map解析

    package demo; import java.util.List;import java.util.Map;import java.util.Map.Entry; import net.sf.j ...