IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 53.整理Spring -> 正文阅读

[Java知识库]53.整理Spring

Spring的组成

  • Spring Context:提供框架式的Bean访问方式以及企业级功能(HNDI,定时任务)
  • Spring Core:核心类库提供IOC和DI服务
  • Spring Aop:提供AOP服务
  • Spring Web:提供面向web的总和特性,对常见web框架的支持
  • Spring MVC:提供面向web应用的Moel-View-Controller
  • Spring DAO:对jdbc的抽象封装,并且能统一管理JDBC事务
  • Spring ORM:对现有ORM框架的支持

IOC?

控制反转,将对象的控制权交给框架,由框架来负责控制对象的生命周期和对象之间的依赖关系,对于某个对象而言,以前是由自己控制它所引用对象的什么周期,在IOC中,所有对象都被Spring控制,容器帮我们创建,查找和注入对象,引用对象只是被动的接受依赖对象

DI是什么?

在程序运行的时候,动态的向某个对象提供它所需要的其他对象,这一点是通过DI来实现的,具体是通过反射实现注入,反射允许程序在运行的时候动态的生成对象,执行对象方法,改变对象的属性

IoC的原理?

其实现原理是工厂模式+反射机制

AOP?

一般称之为面向切面,作为面向对象的一种补充,用于哪些与业务无关,但是却对多个对象产生影响的公共行为和逻辑,抽取并且封装为一个可用的模块,这个模块被命名为切面,可用于权限认证,日志,事务处理

aop的原理?

aop实现的关键在于代理模式,代理模式分为静态代理和动态代理,静态代理的代表为AspectJ,动态代理则以aop为代表

AspectJ是静态代理:也称为编译时增强,aop框架在编译阶段生成aopdialing类,将AspectJ织入到java字节码中,运行的时候就是增强后的aop对象

AOP使用的动态代理又分为JDK动态代理和CGLIB动态代理:

  • JDK动态代理只提供接口的代理(生成匿名接口实现类),不支持类的代理,要求被代理类实现接口,其核心是InvocationHandler接口和Proxy类,获取代理对象的时候,使用Proxy类来动态创建目标类的代理类,当代理对象调用真实对象的方法时,InvocationHandler通过invoke方法反射来调用目标类中的代码,动态的将横切和业务编制在一起
  • 如果代理类没有实现接口,那么就只能使用CGLIB(修改字节码,生成匿名子类),CGLIB在运行时动态的生成指定类的一个子类对象,并且覆盖其中特定的方法从而增强代码,它通过继承的方式做动态代理,如果类被标记为final,是无法进行动态代理的

Spring的通知有哪些类型,执行顺序是怎样的?

  • 前置通知(Before Advice):在连接点(Join point)之前执行的通知。
  • 后置通知(After Advice):当连接点退出的时候执行的通知(不论是正常返回还是异常退出)。
  • 环绕通知(Around Advice):包围一个连接点的通知,这是最强大的一种通知类型。 环绕通知可以在方法调用前后完成自定义的行为。它也可以选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。
  • 返回后通知(AfterReturning Advice):在连接点正常完成后执行的通知(如果连接点抛出异常,则不执行)
  • 抛出异常后通知(AfterThrowing advice):在方法抛出异常退出时执行的通知

没有异常情况的执行流程:

  • around before advice
  • before advice
  • target method 执行
  • after advice
  • around after advice
  • afterReturning advice

有异常时的执行流程:

  • around before advice
  • before advice
  • target method 执行
  • after advice
  • around after advice
  • afterThrowing advice
  • java.lang.RuntimeException:异常发生

BeanFactory和ApplicationContext有什么区别?

ApplicationContext是BeanFactory的子类,它提供了更多功能,比如国际化,资源文件的访问,在监听器中注册bean事件,载入多个上下文

BeanFactory以延迟加载注入bean,ApplicationContext在容器启动的时候创建所有Bean,这样可以一早发现配置的错误

BeanFactory以编程方式创建,ApplicationContext可以以声明方式被创建

SpringBean的生命周期?

  • 实例化Bean
  • 设置对象属性,依赖注入
  • 处理Aware接口:Name,ClassLoader,BeanFactory,ApplicationContext
  • BeanPostProcessor前处理
  • InitializingBean接口
  • init-Method属性
  • BeanPostProcessor后置处理

Bean的作用域?

singleton:默认,单例

prototype:为每个bean请求创建一个实例

request:为每个request请求创建一个实例,请求完成后,会对其进行回收

session:一个session会话共享一个实例

global-session:全局作用域,所有会话共享一个实例

Spring中的Bean是否线程安全?

原型模式安全,单利模式下不安全,对于controller,service,dao等,这些bean是无状态的,只关注方法本身,所以也不存在安全问题

对于有状态的bean比如Model和View,就需要自行保证线程安全,可以采用ThreadLocal解决线程安全问题,为每个线程提供一个独立的变量副本,不同线程只操作自己线程的副本变量

什么是Spring MVC?

通过把Model,View和Controller分离,将web层进行职责解耦,把复杂的web应用分成了逻辑清晰的几部分简化开发,减少出错,方便开发人员之间的配合

MVC流程?

  1. 用户发送请求至前端控制器DispatcherServlet;
  2. DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handler;
  3. HandlerMapping处理器映射器根据请求url找到具体的处理器Handler,生成处理器对象及处理器拦截器(如果有则生成),一并返回给DispatcherServlet;
  4. DispatcherServlet 调用 HandlerAdapter处理器适配器,请求执行Handler;
  5. HandlerAdapter 经过适配调用 具体处理器进行处理业务逻辑;
  6. Handler执行完成返回ModelAndView;
  7. HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
  8. DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
  9. ViewResolver解析后返回具体View;
  10. DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
  11. DispatcherServlet响应用户

#{}和${}的区别是什么?

前者是预处理,后者是字符串替换,前者可以有效的防止sql注入,提高系统安全

通常一个mapper.xml都会对应一个dao接口,原理是什么,dao接口里的方法,参数不同的时候,方法是否能重载?

Mapper接口的工作原理是jdk动态代理,mybatis运行时会使用jdk动态代理为mapper接口生成代理对象proxy,代理对象拦截接口方法,根据类的全限定名+方法名,定位到一个MapperStatement并且调用执行器,执行代表的sql

Mapper接口里的方法不能重载,因为使用的是全限定名+方法名的保存和寻找策略

当实体类中的属性名和表中字段名不一致怎么办?

取别名,使得别名和实体类名一致

    <select id=”selectorder” parametertype=”int” resultetype=”me.gacl.domain.order”>
       select order_id id, order_no orderno ,order_price price form orders where order_id=#{id};
    </select>

映射对应关系

 <select id="getOrder" parameterType="int" resultMap="orderresultmap">
        select * from orders where order_id=#{id}
    </select>
 
   <resultMap type=”me.gacl.domain.order” id=”orderresultmap”>
        <!–用id属性来映射主键字段–>
        <id property=”id” column=”order_id”>
 
        <!–用result属性来映射非主键字段,property为实体类属性名,column为数据表中的属性–>
        <result property = “orderno” column =”order_no”/>
        <result property=”price” column=”order_price” />
    </reslutMap>

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-12 16:20:27  更:2022-05-12 16:21:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:45:56-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码