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