Command + shift + T
這邊是用 logback 實現 slf4j。 (logback.xml)
<configuration> <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender"> <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default --> <encoder> <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> </encoder> </appender> <root level="debug"> <appender-ref ref="STDOUT" /> </root> </configuration> <!-- 头:http://logback.qos.ch/manual/configuration.html -->
使用 try catch 不去向上拋給Junit,因為這樣 Junit會認為測試失敗。
投影片~~~~~~~
也就是說開發中不關心如何去開啟事務、提交、回滾...等,由 Spring 管理。
====================
第二種就是所有的 service 以 add or update 開頭的方法全都是事務的方法。
但推薦第三個,一種約定,看到這標註就要特別注意。
聲明式事務獨有的概念,跟 MySQL沒關係。
propagation_required 當有新事物進來如果有就加入原有事務,否則創新的。
====================
拋出 checked exception 不會回滾
try-catch spring 會感知不到
xml + 註解
投影片~~~~~
Spring 幫我們做完整的初始化過程,自動幫我們組裝好
投影片~~~~~
DAO 資料存取層,只關注如何對 MySQL 做操作
## 使用注解控制方法的优点
* 1.开发团队达成一致的约定,明确标注十五方法的编程风格
* 2.保证事务方法的执行时间尽可能短,不要穿插其他的网络操作 RPC/HTTP请求/或者剥离到事务方法外部
* 3.不是所有的方法都需要事务,如只有一条修改操作,或者只读操作。
## 声明事务的使用方式
## 本项目IOC使用
## Spring-IOC注入的方式和场景
## SeckillService 依赖图
站在使用者的角度去使用接口
业务逻辑分包:
- entity用于存储业务数据库中表对应javabean的封装
- dto用于web和service之间的数据传递
DAO层的总结
推荐使用第三种方式
IoC 不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
其实IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。
IoC很好的体现了面向对象设计法则之一—— 好莱坞法则:“别找我们,我们找你”;即由IoC容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。
抛出运行期异常RuntimeException时才rollback;
logback官网:
http://logback.qos.ch/manual/configuration.html
声明式事务使用方式
IOC注入方式及场景
业务对象依赖图
Spring-IOC注入方式和场景
声明式事务使用方式
Spring-Ioc注入方式和场景
声明式事务使用方式
spring IOC注入方式和场景
photo1
控制失误方法的优点
什么时候回滚事物:
1、如果抛出的是运行期异常的时候事物回滚,如果抛出的是非运行期异常的话就不会事物回滚(就会产生部分成功,部分失败)。
2、小心不当的try-catch,如果你把可能会出现异常的代码用try-catch包括起来之后,spring就感知不到你的程序发生异常了,就会commit。所以开发的时候一定要理解spring声明式事物开发的一些默认行为, 才能够开发出正确的事物控制的程序。
事务方法嵌套:
1、声明式是事务独有的概念就是事务方法嵌套。
2、这是他独有的概念,跟mysql没有关系,体验在他的传播行为上,放我们有多个方法调用的时候,他是创建一个新事物还是加入到已有的事物的时候,这是他的传播行为的一个体现,spring默认的行为那就是propagation_required (当有一个新的事物加入进来的时候,是直接加入到原有的事物里边,如果有就加入,没有就创建一个)
声明式事物的使用方法和实现方式:
spring-ioc 的注入方式和使用场景:
1、方式:xml,应用场景:1.Bean实现类来自第三方类库,如:DataSource等。2.需要命名空间配置,如:context,aop,mvc等。
2、方式:注解,应用场景:项目中自身开发使用的类,可直接在代码中使用注解如:@Service,@Controller等。
3、java配置类:需要通过代码控制对象创建逻辑的场景。如:自定义修改依赖类库。
为什么用IOC:
1、对象的创建统一托管,不像我们之前都是通过new的方式。
2、规范的生命周期管理,有了这样一个规范的生命周期,我们就可以在任意的生命周期点上加入我们的逻辑。 要是还是通过之前编程的方式去实现会造成混乱。
3、灵活的依赖注入,我们可以通过注解也可以通过编程或者通过第三方框架自动的帮我们整合,帮我们完成所有dao的创建和注入。
4、一致的获取对象,有了IOC容器之后,我们可以在容器当中那我们任意已知对象的实例都是很方便的 ,而且这些对象默认的都是单例的。