Java # Spring(2)

这篇具有很好参考价值的文章主要介绍了Java # Spring(2)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Spring事物

一、分类

编程式事物:代码中硬编码(不推荐使用)

声明式事物:配置文件中配置(推荐使用)

  • 分类:
    • 基于xml的声明式事物
    • 基于注解的声明式事物

二、隔离级别

  • ISOLATION_DEFAULT:使用后端数据库默认的隔离级别
    • Mysql默认采用的REPEATABLE_READ隔离级别
    • Oracle默认采用的READ_COMMITTED隔离级别
  • ISOLATION_READ_UNCOMMITTED:最低的隔离级别,允许读取尚未提交的数据变更,可能会导致脏读、幻读或不可重复读。
  • ISOLATION_READ_COMMITTED:允许读取并发事物已经提交的数据,可以阻止脏读,但是幻读或不可重复读仍有可能发生。
  • ISOLATION_REPEATABLE_READ:对同一字段的多次读取结果都是一致的,除非数据是被本身事物自己所修改,可以阻止脏读和不可重复读,但幻读仍有可能发生。
  • ISOLATION_SERIALIZABLE:最高的隔离级别,完全服从ACID的隔离级别,串行化。

三、事物传播行为

一、支持当前事物的情况

  1. TransactionDefinition.PROPAGATION_REQUIRED:如果当前存在事务,则加入该事务;如果当前没有事务,则创建一个新的事务。
  2. TransactionDefinition.PROPAGATION_SUPPORTS: 如果当前存在事务,则加入该事务:如果当前没有事务,则以非事务的方式继续运行。
  3. Transaction Definition.PROPAGATION_MANDATORY:如果当前存在事务,则加入该事务:如果当前没有事务,则抛出异常。(mandatory:强制性)

二、不支持当前事物的情况

  1. TransactionDefinition.PROPAGATION_REQUIRES_NEW:创建一个新的事物,如果当前存在事物,则把当前事物挂起。
  2. TransactionDefinition.PROPAGATION_NOT_SUPPORTED:以非事物方式运行,如果当前存在事物,则抛出异常。
  3. TransactionDefinition.PROPAGATION_NEVER:以非事物方式运行,如果当前存在事物,则抛出异常。

三、其他情况

TransactionDefinition.PROPAGATION_NESTED:如果当前存在事务,则创建一个事务作为当前事物的嵌套事务来运行;如果当前没有事物,则该取值等价于TransactionDefinition.PROPAGATION_REQUIRED

四、设计模式

  • 工厂设计模式:Spring使用工厂模式通过BeanFactory、ApplicationContext创建Bean对象。
  • 代理设计模式:Spring AOP功能的实现。
  • 单例设计模式:Spring中的Bean默认都是单例的。
  • 模版方法模式:Spring中jdbcTemplate、hibernateTemplate等以Template结尾的对数据库操作的类,它们就使用到了模版模式。
  • 包装器设计模式:我们的项目需要连接多个数据库,而且不同的客户在每次访问中根据需要去访问不同的数据库。这种模式让我们可以根据客户的需求能够动态切换不同的数据源。
  • 观察者模式:Spring事件驱动模型就是观察者模式很经典的一个应用。
  • 适配器模式:Spring AOP的增强或通知(Advice)使用到了适配器模式、spring MVC中也是用到类适配器模式适配Controller。

五、Spring MVC

一、概述

Model1时代存在的问题:

  • 将控制逻辑和表现逻辑混杂在一起,导致代码重用率极低。
  • 前端和后端相互依赖,难以进行测试并且开发效率极低。

Model2时代存在的问题:

  • 抽象和封装程度远远不够。
  • 重复造轮子,降低了程序的可维护性和复用性。

MVC是一种设计模式,Spring MVC一款很优秀的MVC框架,天生与Spring框架集成。

Spring MVC下我们一般把后端项目分为Service层(处理业务)、Dao层(数据库操作)、Entity层(实体类)、Controller层(控制层,返回数据给前台页面)

二、工作原理 

Java # Spring(2),java,八股文,开发语言

六、Spring bean

一、作用域

  • singleton:唯一bean实例,Spring中的bean默认都是单例的。
  • prototype:每次请求都会创建一个新的bean实例。
  • request:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP request内有效。
  • session:每一次HTTP请求都会产生一个新的bean,该bean仅在当前HTTP session内有效。
  • global-session:全局session作用域,仅仅在基于portlet的web应用中才有意义,Spring5已经没有了。

二、单例bean线程安全

        多个线程操作同一个对象的时候,对这个对象的成员变量的写操作会存在线程安全问题。一般情况下,我们常用的Controller,Service,Dao这些Bean是无状态的。无状态的Bean不能保存数据,因此线程是安全的。

解决方法:

  • 在类中定义一个ThreadLocal成员变量,将需要的可变成员变量保存在ThreadLocal中(推荐的一种方式)。
  • 改变Bean的作用域为“prototype”:每次请求都会创建一个新的bean实例,自然不会存在线程安全问题。

三、@Component和@Bean的区别

  • @Component:注解作用于类,通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中(我们可以使用@ComponentScan注解定义要扫描的路径从中找出标识了需要装配的类自动装配到Spring的bean容器中)。
  • @Bean:作用于方法,在标有该注解的方法中定义产生这个bean,@Bean告诉了Spring这是某个类的示例,当我们需要用它的时候还给我。

@Bean注解比@Component注解更强,而且很多地方我们只能通过@Bean注解来注册bean。比如当引用第三方库中的类需要装配到Spring容器时,则只能通过@Bean来实现。文章来源地址https://www.toymoban.com/news/detail-646423.html

四、类声明为Spring的bean的注解

  • @Autowired注解自动装配bean
  • @Component:通用的注解,可标注任意类为Spring组件。如果一个Bean不知道属于哪个层,可以使用@Component注解标注。
  • @Repository:对应持久层即Dao层,主要用于数据库相关操作。
  • @Service:对应服务层,主要涉及一些复杂的逻辑,需要用到Dao层。
  • @Controller:对应Spring MVC控制层,主要用于接受用户请求并调用Service层返回数据给前端页面。

到了这里,关于Java # Spring(2)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Java 八股文-基础篇

    1.什么是 Java? Java 是一门面向对象的编程语言,不仅吸收了 C++语言的各种优点,还摒弃了 C++里难以理解的多继承、指针等概念,因此 Java 语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编程语言的优秀代表,极好地实现了面向对象理论,允许程序员以优

    2024年02月08日
    浏览(49)
  • Java八股文(Elasticsearch)

    什么是Elasticsearch? Elasticsearch是一个开源的分布式搜索和分析引擎,用于实时存储、搜索和分析大规模数据集。 Elasticsearch的主要特点是什么? Elasticsearch的主要特点包括: ● 分布式和高可用性:支持数据在多个节点上的水平分片和复制。 ● 实时搜索和分析:能够实时索引

    2024年04月17日
    浏览(43)
  • Java面试必备八股文

    1.1)Java有哪几种数据类型 基本数据类型:byte(1字节) short(2字节) int(4字节) long(8字节) float(4字节) double(8字节) char(2字节) boolean(1字节) 引用数据类型:String 类 接口 抽象类 枚举 数组 1.2)JVM、JRE和JDK的关系 JVM指的是Java的虚拟机,Java程序需要运行在虚拟机上

    2023年04月08日
    浏览(53)
  • java八股文-并发篇

    要求 掌握 Java 线程六种状态 掌握 Java 线程状态转换 能理解五种状态与六种状态两种说法的区别 六种状态及转换 分别是 新建 当一个线程对象被创建,但还未调用 start 方法时处于 新建 状态 此时未与操作系统底层线程关联 可运行 调用了 start 方法,就会由 新建 进入 可运行

    2024年02月08日
    浏览(42)
  • Java 八股文 - MySQL

    ​ 三种锁的特点 表级锁 :开销小,加锁快;不会出现死锁;锁定颗粒度大,发生锁冲突的概率最高,并发度最低。 行级锁 :开销大,加锁慢;会出现死锁;锁定颗粒度最小,发生所冲突的概率最低,并发度也最高 页面锁 :开销和加锁时间介于表所和行锁之间;会出现死锁

    2024年02月08日
    浏览(47)
  • Java面试八股文宝典:序言

    Java作为一门广泛应用于企业级应用开发的编程语言,一直以来都是技术面试中的重要话题。无论您是刚刚踏入编程世界的新手,还是经验丰富的Java开发工程师,都需要通过面试来展示自己的技能和知识。 在面试中,除了技术知识,还需要展现出解决问题、沟通能力和编程实

    2024年02月09日
    浏览(57)
  • 【八股文篇】Java 面试题

    👉 博主介绍 : 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO TOP红人 Java知识图谱点击链接: 体系化学习Java(Java面试专题) 💕💕 感兴趣的同学可以收藏关注下 , 不然下次找不到哟

    2024年02月12日
    浏览(49)
  • java八股文面试[java基础]——面相对象特点

    三大特点: 封装 继承 多态   面试题:java如何实现多继承(除了使用接口之外) 实现多继承有三个方法 : 多层继承 内部类 接口 参考 java实现多继承的三种方式 多层继承 ​如果要直接继承类,子类是不可以直接多继承的,但是可以通过多层继承来实现多继承,但多层继承

    2024年02月12日
    浏览(52)
  • java八股文面试[java基础]—— 重载 和 重写

      Overload Override Overwrite三者区别:   Java中,有一个名叫方法签名的东西,它的定义是这样的 Definition: Two of the components of a method declaration comprise the method signature—the method’s name and the parameter types. 大概意思是,方法签名有两部分组成——方法名和参数列表 我上面的函数的方法

    2024年02月12日
    浏览(52)
  • 一天吃透Java面试八股文

    Java是一门面向对象的编程语言 。面向对象和面向过程的区别参考下一个问题。 Java具有平台独立性和移植性 。 Java有一句口号: Write once, run anywhere ,一次编写、到处运行。这也是Java的魅力所在。而实现这种特性的正是Java虚拟机JVM。已编译的Java程序可以在任何带有JVM的平台

    2024年02月05日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包