REQUIRED(Spring默认的事务传播类型):如果当前没有事务,则自己新建一个事务,如果当前存在事务,则加入这个事务
SUPPORTS:当前存在事务,则加入当前事务,如果没有事务,则以非事务的方法执行
MANDATORY:当前存在事务,则加入当前事务,如果当前事务不存在,则抛出异常
REQUIRES_NEW:创建一个新事务,如果存在当前事务,则挂起该事务
NOT_SUPPORTED:以非事务方式执行,如果存在事务,则挂起该事务
NEVER:不使用事务,如果当前事务存在,则抛出异常
NESTED:如果当前事务存在,则在嵌套事务中执行,否则开启一个新事务
NESTED和REQUIRES_NEW的区别: REQUIRES_NEW是新建一个事务,开启的这个事务与当前的事务(父事务)无关,而NESTED是当前存在事务会开启一个嵌套事务(子事务),在NESTED情况下父事务回滚时,子事务也会回滚,而REQUIRES_NEW情况下,原事务回滚不会影响开启的事务 NESTED和REQUIRED的区别 REQUIRED的情况下,调用方法存在事务时,则被调用乙方使用同一个事务,被调用方出现异常时,因为使用的是同一个事务,则两方都会回滚,而NESTED情况下,被调用方发生异常时,调用方可以catch捕获其异常,使得调用方不受影响
Spring事务的原理是AOP,进行切面加强,失效的根本原因是这个AOP不起作用了
发生自调用的时候,类里面使用this调用本类的方法会失效,因为这个this对象不是代理类,而是UserService对象本身。解决方法:让this变成UserService的代理类
方法不是public的
@Transaction 只能用在public的方法上,否则事务会失效,如果要用在非public方法上,可以开启ASpectJ代理模式
开启自动装配,只需要在xml配置文件
<bean id="cutomer" class="com.xxx.....Customer" autowire="" />
autowire属性有五种装配方式:
no - 缺省不写的情况下,自动装配是通过ref属性手动装配
byName - 根据bean的属性名称自动装配
Customer 的属性名称是person,Spring会将bean id 为person的bean通过setter方法进行自动装配 <bean id="cutomer" class="com.xxx.....Customer" autowire="byName" /> <bean id="person" class="com.xxx.....Person" />
byType - 根据bean的类型进行自动装配
Customer 的属性person的类型为Person,Spring会将Person类型通过setter方法进行自动装配 <bean id="cutomer" class="com.xxx.....Customer" autowire="byType" /> <bean id="person" class="com.xxx.....Person" />
constructor - 类似byType,不过是应用于构造器的参数。如果一个bean与构造器参数的类型相同,则进行自动装配,否则导致异常
Customer 构造函数的参数person的类型为Person,Spring会将Person类型通过构造方法方法进行自动装配 <bean id="cutomer" class="com.xxx.....Customer" autowire="constructor " /> <bean id="person" class="com.xxx.....Person" />
autodetect - 如果有默认的构造器,则通过constructor方式进行自动装配,否则使用byType方式进行自动装配
使用注解的方式自动装配bean @Autowire,可以在字段、setter方法、构造函数上使用。
Spring 是一个IOC 容器 ,用来管理Bean,使用依赖注入实现控制反转,可以让程序降低耦合,可以很方便的整合各种框架,提供AOP机制,来弥补了OOP代码重复问题、更方便将不同类不同方法中的共同处理抽取成切面,自动注入给方法执行
Spring MVC 是Spring对web框架的一个解决方案,提供了一个总的前端控制器Servlet,用来接收请求,定义了一整套路由策略以及适配器执行handle,将handle结果会使用视图解析技术生成视图展现给前端
Spring Boot 是Spring 提供的一个快速开发工具包,让程序员能更方便、更快速的开发 Spring + Spring MVC 应用,简化了配置,整合了一系列的解决方案、redis、nongodb、es,可以开箱即用
Handler:也就是处理器。它直接应对着MVC中的C也就是Controller层,他的具体表现形式有很多,可以是类,也可以是方法。在Controller层中@RequestMapping标注的所有的方法都可以看成是一个Handler,只要可以实际处理请求就可以是Handler
详情请看:https://blog.csdn.net/wkwk12345/article/details/108028470
使用Spring+SpringMVC时,如果需要引入Mybatis等框架,需要到xml中定义Mybatis需要的bean
starter就是定义一个starter的jar包,写一个@Configuration配置类、将这些bean定义在里面,然后在starter包的META-INF/spring.factories中写入该配置类,springboot就会按照约定来加载该配置类
开发人员使用起来只需要将相应的starter包依赖进应用,进行相应的属性配置。
节省了下载安装Tomcat,应用也不需要打war包,然后放到webapp目录下再运行
只需要安装了java的虚拟机,就可以直接在上面部署应用程序了
springboot已经内嵌了tomcat.jar,运行main方法时会去启动tomcat,并利用Tomcat的spi机制加载SpringMVC
优点:
缺点: