由转账添加事物,使得我们的操作变的非常麻烦.重复代码产生了很多 实际的开发中如果想记录日志每个方法都要执行 如果判断用户是否登陆也是每个方法都需要判断 这些重复的代码我们都需要去解决. 解决的方式,以前是重复代码抽取.抽取出来之后就调用.抽取并不是终点,只是第一步. 接下来就需要把重复的代码在方法执行时加进去.那么怎么加进去呢?这就是之前讲到的技术,动态代码是不该原有方法的基础上,对方法进行 增强. sprinfg中的AOP: 创建代理对象都是固定的,唯一不固定的就是增强的部分 那么怎么增强.什…
复制依赖和改jar包方式 src下的都复制过来. 复制到新项目里了 bean.xml里面复制上面一行代码到下面.把aop改成context. 配置spring容器创建时要扫描的包 Service的配置这里就可以删除了 配置注解 使用@Service注解 开始AOP配置 把通知类交给Spring来管理 在Logger上加注解.之类注意,@Service和@Repository都不合适.因为logger属于三层 所以这里用@Component这个注解来配置 写完上面的@Component的注解后.b…
下面配置了通用的表达式,,上面的四个就不用再配置那么长 索罗的切入点表达式了. 节省了每次都要写一长段表达式的过程 写在一个aop:aspect这个切面下面就只能当前切面用 写在切面里面 运行测试 挪到切面外面.报错了 因为切面标签报错了.如果运行测试方法就会报错.但是提示的错误不明显 原因是导了约束就必须按照约束去配置 约束里面要求,这个标签必须出现在切面之前 再次运行测试 .成功执行…
基于接口的动态代理要求,要去被代理对象最少实现一个接口 基于子类的动态代理没有实现接口的要求.但是要求我们的被代理类不能是最终类 在Spring中可以选择基于接口还是子类的动态代理 术语 大白话.业务层看到方法就都是连接点.IAccountService中的方法.它是连接什么的呢? 连接我们的业务和增强方法中的那个点. 那么如何把增强的代码也就是事物控制的代码加到我们的业务中来 这些方法可以加上事物的支持.从而让我们的业务方法,形成完整的业务逻辑 PointCut切入点 在业务层中新写一个方法…
环绕通知.method属性需要新加一个方法 在logger内中新加aroundPringLog方法 异常代码先注释掉 对比现在的环绕通知和之前写代理类做的环绕通知.右侧的方法内有明确的业务层方法(切入点方法)调用.左边没有业务方法调用 proceed方法有异常,需要在try catch中 try catch 必须用Throwable要不然拦不住这个异常 通过配置实现,也可以通过自己编码来实现…
新建项目 复制上节课的pom.xml内的代码 复制java下的代码 测试类也复制过来 配置文件也拷贝过来 logge下增加几个方法 测试方法只需要一个saveAccount方法就可以了 增加其他三种通知的配置 执行测试方法 after没有执行. after是因为方法写错 改正 没有异常通知.原因是我们的程序没有产生异常,所以不会有异常通知 故意制造个错误.…
写测试类来测试..也不需要整合JUnit了就是个普通的测试类. 我们要看就是有没有给我们真正的实现 记录日志 配置起作用了. 三个方法都调用一下 目前我们的配置只能对saveAccount增强 通常情况下 我是对业务层所有的方法添加增强,尤其是在事务控制时 切点表达式的写法 访问修饰符可以省略 运行测试.没有问题 返回值可以使用通配符,表示任意返回值 这里也就是void 用*代替了. 包名可以使用通配符 包名可以使用.. 任意包下只有有AccountServiceImpl类 里面的方法saveA…
resources下新建bean.xml文件 xmlns:aop 先配置IOC aop 通知类就是logger.id配置为logAdvice表示日志的通知 梳理流程 首先我们在这有个Service它需要增强.它想在执行里面任何一个方法时都记录日志 然后我们就准备出了一个日之类.这个日志类里面就一个prinLog方法可以记录日志 配置了日志的通知.并说明里面有个printLog方法.会在Service的方法之前执行执行 现在还存在一个很大的问题.我们的前置通知类和Serice没有任何的关系 poi…
新建项目 先改打包方式 导包,就先导入这俩包的坐标 aspectjweaver为了解析切入点表达式 新建业务层接口 定义三个方法 看返回和参数的区别.为了把这三类方法表现出来,并不局限于方法干什么事 1.无参无返回值 2.有参无返回值 3.有返回值无参 创建实现类,,业务层的实现类 重写三个方法,方法内只是输出一段话 新建具有公共代码的类…