面向切面编程即抽取程序的公共方法放在一个类里面(这个类被称为通知),然后在需要该方法的时候通过AOP将这个公共方法插入进来,既可以节省代码量,又不需要修改源码。
此处以插入log日志为例子演示AOP的插入配置和过程
一、JAR包
spring的四大核心包加aop和aspects包 另外需要2个日志包 1个aop 1个aspect。 一共10个包。
二、编写接口和实现类,模拟service层
我们模拟一个service的接口类ICustomerService.java 具有三种方法
package tz.service;
public interface ICustomerService {
//保存客户
void saveCustomer();
//更新客户
void updateCustomer(int i);
//删除客户
int deleteCustomer();
}
接着写一个实现类CustomerServiceImpl.java
package tz.service.impl;
import tz.logtest.Logger;
import tz.service.ICustomerService;
//模拟客户的业务层的实现类
public class CustomerServiceImpl implements ICustomerService {
@Override
public void saveCustomer() {
System.out.println("保存客户");
}
@Override
public void updateCustomer(int i) {
System.out.println("更新客户。。"+i);
}
@Override
public int deleteCustomer() {
System.out.println("删除客户");
return 0;
}
}
一个基本的service层就成型了,此时配置spring用来创建对象,新建一个bean.xml文件。
再新建一个执行类Client.java
package tz.ui;
import javafx.application.Application;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import tz.service.ICustomerService;
public class Client {
public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
ICustomerService cs= (ICustomerService) ac.getBean("customerService");
cs.saveCustomer();
}
}
此时运行Client的main()方法即可获得控制台输出"保存客户",说明配置完毕
三、插入log文件。
新建一个Logger.java 包含一个printLog方法 模拟打印日志
package tz.logtest;
//一个用于记录日志的类
public class Logger {
//记录日志操作
public void printLog(){
System.out.println("Logger中的printLog方法开始记录日志了。。。。");
}
}
此时要求在service层的方法里打印日志,如果普通做法即是在service层创建log对象执行printLog()方法
public class CustomerServiceImpl implements ICustomerService {
@Override
public void saveCustomer() {
new Logger().printlLog();
System.out.println("保存客户");
}
其他地方不需要改变,运行Client即可输出日志,内容如下:
Logger中的printLog方法开始记录日志了。。。。
保存客户
但是在service里面需要执行的方法有那么多,如果是真实的开发中需要每个方法都打印日志的时候,一个一个的在方法里创建对象再执行打印方法肯定是存在弊端的,1.代码重复 2.代码量加大 3.需要修改源码,此时我们就可以通过AOP的面向切面编程,将这个打印日志方法作为一个面切到切入点中,这个切入点即是需要执行公共方法的地方,切面即是我们的公共方法。
四、改进
配置bean.xml
配置好bean.xml之后 在CustomerServiceImpl的saveCustomer方法中就不需要执行printLog()方法了
再次运行Client.java 即可获得和之前一样的输出
Logger中的printLog方法开始记录日志了。。。。
保存客户
以上就是AOP的简单配置模拟。