JavaEE——Spring学习笔记03【AOP开发】( 二 )


/** CglibProxy动态代理的类:实现MethodInterceptor* */public class CglibProxy implements MethodInterceptor {//给出要代理的对象private CustomerService customerService;public CglibProxy(CustomerService customerService) {this.customerService = customerService;}/** 使用Cglib产生代理的方法* */public CustomerService createProxy() {//1.创建Cglib的核心类的对象Enhancer enhancer = new Enhancer();//2.设置父类enhancer.setSuperclass(customerService.getClass());//3.设置回滚enhancer.setCallback(this);//4.创建代理的对象CustomerService proxy = (CustomerService) enhancer.create();return proxy;}/** 功能增强* */@Overridepublic Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {//判断方法if ("delete".equals(method.getName())) {//增强System.out.println("日志信息==========");return methodProxy.invokeSuper(proxy, args);}return methodProxy.invokeSuper(proxy, args);}}
4)测试的类
/** 客户信息测试类* */public class CustomerServiceTest {public static void main(String[] args) {//创建一个目标类CustomerService customerService = new CustomerService();//代理过程CustomerService proxy = new CglibProxy(customerService).createProxy();proxy.save();proxy.update();proxy.find();proxy.delete();}}
3. AOP的编程的好处
1.减少重复
2.专注于业务功能增强的实现,就是oop的补充 。
3.解模块之间的耦合性
4.实现了事务的功能管理
5. 。。。。。
4. AOP的编程相关术语
1)切面:
切面指的是一个辅助类,实际上就是对业务逻辑的一种增强管理类 。
2)连接点:
连接点是指可以被切面植入的具体的方法,通常情况就是业务中的方法均可以作为连接点 。
3)切入点:
切入点(切点)声明一个或多个连接点的集合,一般我们理解为真正被增强的那个方法或方法的集合 。
4)目标对象:
目标对象就是指被增强的对象,即包含业务逻辑的类的对象
5)通知:
通知定义了增强代码切入到目标代码的时间点(可前可后进行增强),是目标方法执行前还是执行后等,通知的类型不同,导致切入的时间点就不一样了 。
6)织入:
织入就是增强添加对目标类具体连接点的过程 。
5. AOP的开发模式 5.1 Aop的Xml开发方式
本身有自己对AOP开发的实现,但是开发者发现了这个过程太过于繁琐了,所以在实际开发中我们使用的是技术实现对AOP的开发,其实就是简化本身的开发 。其实现方式简洁、方便管理,而且还支持注解开发 。所以又将作为AOP实现引入到自己框架中 。
log4j.properties日志配置log4j.rootLogger = debug,stdout,D,Elog4j.appender.stdout = org.apache.log4j.ConsoleAppenderlog4j.appender.stdout.Target = System.outlog4j.appender.stdout.layout = org.apache.log4j.PatternLayoutlog4j.appender.stdout.layout.ConversionPattern = [%-5p] %d{yyyy-MM-dd HH:mm:ss,SSS} method:%l%n%m%nlog4j.appender.D = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.D.File = D://logs/log.loglog4j.appender.D.Append = truelog4j.appender.D.Threshold = DEBUG log4j.appender.D.layout = org.apache.log4j.PatternLayoutlog4j.appender.D.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}[ %t:%r ] - [ %p ]%m%nlog4j.appender.E = org.apache.log4j.DailyRollingFileAppenderlog4j.appender.E.File =D://logs/error.log log4j.appender.E.Append = truelog4j.appender.E.Threshold = ERROR log4j.appender.E.layout = org.apache.log4j.PatternLayoutlog4j.appender.E.layout.ConversionPattern = %-d{yyyy-MM-dd HH:mm:ss}[ %t:%r ] - [ %p ]%m%n
5.1.1 前置通知:
1)引入的依赖jar包
junit