网站速度查询,宁波网站建设团队排名,建行个人网上银行登录,邯郸网站建设纵横一、Spring事物
一、分类 编程式事物#xff1a;代码中硬编码#xff08;不推荐使用#xff09; 声明式事物#xff1a;配置文件中配置#xff08;推荐使用#xff09; 分类#xff1a; 基于xml的声明式事物基于注解的声明式事物 二、隔离级别
ISOLATION_DEFAULT…一、Spring事物
一、分类 编程式事物代码中硬编码不推荐使用 声明式事物配置文件中配置推荐使用 分类 基于xml的声明式事物基于注解的声明式事物 二、隔离级别
ISOLATION_DEFAULT使用后端数据库默认的隔离级别 Mysql默认采用的REPEATABLE_READ隔离级别Oracle默认采用的READ_COMMITTED隔离级别ISOLATION_READ_UNCOMMITTED最低的隔离级别允许读取尚未提交的数据变更可能会导致脏读、幻读或不可重复读。ISOLATION_READ_COMMITTED允许读取并发事物已经提交的数据可以阻止脏读但是幻读或不可重复读仍有可能发生。ISOLATION_REPEATABLE_READ对同一字段的多次读取结果都是一致的除非数据是被本身事物自己所修改可以阻止脏读和不可重复读但幻读仍有可能发生。ISOLATION_SERIALIZABLE最高的隔离级别完全服从ACID的隔离级别串行化。
三、事物传播行为
一、支持当前事物的情况
TransactionDefinition.PROPAGATION_REQUIRED如果当前存在事务则加入该事务如果当前没有事务则创建一个新的事务。TransactionDefinition.PROPAGATION_SUPPORTS 如果当前存在事务则加入该事务如果当前没有事务则以非事务的方式继续运行。Transaction Definition.PROPAGATION_MANDATORY如果当前存在事务则加入该事务如果当前没有事务则抛出异常。mandatory强制性
二、不支持当前事物的情况
TransactionDefinition.PROPAGATION_REQUIRES_NEW创建一个新的事物如果当前存在事物则把当前事物挂起。TransactionDefinition.PROPAGATION_NOT_SUPPORTED以非事物方式运行如果当前存在事物则抛出异常。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层控制层返回数据给前台页面
二、工作原理 六、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线程安全 多个线程操作同一个对象的时候对这个对象的成员变量的写操作会存在线程安全问题。一般情况下我们常用的ControllerServiceDao这些Bean是无状态的。无状态的Bean不能保存数据因此线程是安全的。 解决方法 在类中定义一个ThreadLocal成员变量将需要的可变成员变量保存在ThreadLocal中推荐的一种方式。改变Bean的作用域为“prototype”每次请求都会创建一个新的bean实例自然不会存在线程安全问题。 三、Component和Bean的区别
Component注解作用于类通常是通过类路径扫描来自动侦测以及自动装配到Spring容器中我们可以使用ComponentScan注解定义要扫描的路径从中找出标识了需要装配的类自动装配到Spring的bean容器中。Bean作用于方法在标有该注解的方法中定义产生这个beanBean告诉了Spring这是某个类的示例当我们需要用它的时候还给我。 Bean注解比Component注解更强而且很多地方我们只能通过Bean注解来注册bean。比如当引用第三方库中的类需要装配到Spring容器时则只能通过Bean来实现。 四、类声明为Spring的bean的注解
Autowired注解自动装配beanComponent通用的注解可标注任意类为Spring组件。如果一个Bean不知道属于哪个层可以使用Component注解标注。Repository对应持久层即Dao层主要用于数据库相关操作。Service对应服务层主要涉及一些复杂的逻辑需要用到Dao层。Controller对应Spring MVC控制层主要用于接受用户请求并调用Service层返回数据给前端页面。