一、spring框架的优点:
1、轻量:基础版本只有2MB
2、控制反转:通过控制反转,实现松散耦合,对象们给出他们的依赖,而不是通过创建或查找对象的依赖
3、面向切面编程:通过面向切面编程,实现业务逻辑和系统服务分开,支持面向切面编程
4、AOP事务管理:spring提供事务管理接口,实现本地事务和全局事务的管理
5、exception异常处理:提供异常处理接口,把hibernate或者jdbc的异常转为一致的unchecked异常
6、IOC容器:spring包含并管理应用中对象的生命周期和配置,实现java bean的低耦合,便于java code(对象)的重复使用
7、MVC框架:spring的web框架是一个优秀的框架,是web框架的替代品
8、大量的注解pojo,简化了xml配置,简化开发难度
小结:spring很好的实现了系统的低耦合、高聚合,便于代码的重用,而且面向接口的编程可以让api的访问不用知道底层的实现(如jdbctemplate,它并不知道是访问什么类型的数据库,只是配置上的差异,这样以后想从mysql换到oracle只需要换下驱动就好了,dao代码都不用改)
spring事务管理AOP:
AOP,即Aspect-Oriented Program面向切面编程,基于动态代理,AOP是横向的、无入侵性的、可插拔的、高复用的,因此广泛应用于日志记录、事务管理、权限控制、异常处理等场景。
切面类:execution表达式
1、前置通知:@Before
2、后置通知:@After
3、环绕通知: @Around
4、正常结束通知:@AfterReturning
5、异常终止通知:@AfterThrowing
编程式事务:业务方法中手动编码开启事务会话、提交事务、回滚。(不提倡使用)
声明式事务:通过@Transactional注解来实现(推荐使用)
只需在方法和类上添加@Transactional注解即可添加事务控制(若在类上添加则相当于在每个方法上都加了@Transactional)
实现原理:
Spring通过扫包发现被注解为@Transactional的方法,再通过AOP的方法进行编程式事务控制。
事务的隔离级别:
小常识:
1.事务级别从低到高:脏读->不可重复读->可重复读->解决幻读
2.事务级别越高,数据越安全,消耗的资源越多,数据库操作性能越低
3.在企业项目中,使用哪一种级别的事务,需要根据业务需求来确定
事务的传播行为:
事务超时时间:
以秒为单位进行设置。如果设置为-1(默认值),表示没有超时限制。项目中使用默认值即可
是否只读事务:
只读事务比读写事务性能要高,实际项目中,查询一般建议设置为只读
二、spring中的5中自动装配方式:
1、**no:**这是Spring框架的默认设置,在该设置下自动装配是关闭的,开发者需要自行在bean定义中用标签明确的设置依赖关系。
2、**byName:**该选项可以根据bean名称设置依赖关系。当向一个bean中自动装配一个属性时,容器将根据bean的名称自动在在配置文件中查询一个匹配的bean。如果找到的话,就装配这个属性,如果没找到的话就报错。
3.、byType:该选项可以根据bean类型设置依赖关系。当向一个bean中自动装配一个属性时,容器将根据bean的类型自动在在配置文件中查询一个匹配的bean。如果找到的话,就装配这个属性,如果没找到的话就报错。
4、 constructor:构造器的自动装配和byType模式类似,但是仅仅适用于与有构造器相同参数的bean,如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。
5、 autodetect:该模式自动探测使用构造器自动装配或者byType自动装配。首先,首先会尝试找合适的带参数的构造器,如果找到的话就是用构造器自动装配,如果在bean内部没有找到相应的构造器或者是无参构造器,容器就会自动选择byTpe的自动装配方式。