为什么要使用代理模式? 因为代理模式就是SpringAOP和SpringMVC的底层。 代理模式的分类: 静态代理 动态代理
角色分析: 抽象角色:一般使用接口或者抽象类解决,主要写完成什么事 真实角色:被代理的角色 代理角色:帮助真实角色完成某些事情,从中可以加独有的操作 客户:需要干这件事的用户
就比如我们生活中的租房子,抽象角色就是租房子这件事。真实角色就是房东。代理角色就是中介。而客户就是要租房子的人。
代码步骤: 1. 接口 2. 真实角色 3. 代理角色 4. 客户 加深理解 我们之前使用的userDao接口,如果使用了此实现类,如果在每一个方法上都添加一个日志,就得在每一个方法中添加代码,如果使用代理模式,我们直接将所需的这个类提取出来就可以做到这件事。
使用代理的目的就是为了在不修改原来代码的基础上,横向的增加自己的新功能,但是使用静态代理的缺点就是没产生一个代理,就要创建一个代理对象,这时我们的代码量就会翻倍,为了解决这个问题,我们引入了动态代理。
动态代理类创建步骤: 1. 创建一个抽象角色 2. 创建一个真实对象 3. 创建动态的代理对象(继承InvocationHandler) 创建被代理接口 生成该接口的set方法 生成getProxy方法 生成invoke方法 添加自己的操作 4. 创建用户
什么是AOP? AOP是面向切面编程,通过预编译的方式和运行期动态代理实现程序功能统一维护的技术,使用AOP可以将业务之间的逻辑分离,从而使业务逻辑各部分之间耦合度降低,提高程序的可重用性,增加开发效率。 AOP在spring中的作用? 提供声明式事务,允许用户自定义切面。
横切关注点:在哪个地方执行 切面:关注点被模块化成为一个对象 通知:执行什么方法,切面中的方法 其中有5中通知: 前置通知:方法前通知(MethodBeaforeAdvice) 后置通知:方法后通知(AfterReturnintAdvice) 环绕通知:方法前后(MethodInterception) 异常抛出通知:方法抛出异常通知(ThrowsAdvice) 引介通知:类中增加新方法或属性(IntroductionInterceptor)
目标:被通知的对象(execution)步骤: 1. 先创建接口 2. 创建接口实现类 3. 通过接口创建通知 4. 配置(ApplicationContext.xml) 5. 测试
配置所需bean使用aop接口配置切点执行通知
步骤: 1. 自定义切面 2. 配置ApplicationContext.xml 3. 测试
步骤: 1. 创建一个类使用注解标记切面,切点 2. 开启使用注解配置 3. 测试
导入相关的依赖jar包
首先创建一个applicationContext.xml 在其中用DriverManagerDataSource配置dataSource(就如之前在mybatis中配置的datasource一样) 然后通过SqlSessionFactoryBean创建sqlSessionFactory,用来创建sqlSession,并在其中配置mybatis的配置文件 在通过SqlSessionTemplate配置sqlsession并注入sqlSessionFactory 最后在配置mapp文件 简化之前的mybatis-config.xml的配置文件 之前的Mapper和Mapper.xml文件不变 添加了一个新的实现类 测试
继承了SqlSessionDaoSupport就可以直接不用写sqlsession了,spring帮我们生成了。
什么是事务? 把一组操作绑定在一块,执行事要么都成功要么都失败。遵循着ACID原则。
如果没有开启事务,就算提交的业务中有错误,没有错误的也会提交上去。 这就是我们数据中的大忌!
我们通过声明式事务开启事务 我们把要提交的一类的业务放在一块进行提交,这时如果一个提交不上,就全部提交不上了。