这里只是模拟开发中的场景。
1.POJO
package com.qwy.bean;
/**
* @author qwy
* @create 2021-04-23 22:10
**/
public class Users {
}
2.代理接口
package com.qwy.service;
import com.qwy.bean.Users;
/**
* @author qwy
* @create 2021-04-23 22:24
**/
public interface UsersService {
public void save(Users users);
public void delete(Users users);
public void update(Users users);
public Users getUsersById(Integer id);
}
3. 被代理类(需要增强的方法)
package com.qwy.service.impl;
import com.qwy.bean.Users;
import com.qwy.service.UsersService;
/**
* @author qwy
* @create 2021-04-23 22:09
**/
public class UsersServiceImpl implements UsersService {
public void save(Users users){
System.out.println("UsersService.save");
}
public void delete(Users users) {
int num = 6/0;
System.out.println("UsersService.delete");
}
public void update(Users users){
System.out.println("UsersService.update");
}
public Users getUsersById(Integer id){
System.out.println("UsersService.getUsersById");
return new Users();
}
}
4. 代理类
package com.qwy.service.impl;
import com.qwy.service.UsersService;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* @author qwy
* @create 2021-04-23 22:26
**/
public class UsersServiceLogProxy {
//要代理的目标对象对象
private UsersService target=null;
public UsersServiceLogProxy(UsersService usersService){
this.target=usersService;
}
public UsersService getUsersServiceLogProxy(){
return (UsersService) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(), new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Object invoke=null;
try{
//前置通知
System.out.println("访问方法:"+method.getName()+"开始");
invoke = method.invoke(target, args);
//返回通知
System.out.println("访问方法:"+method.getName()+"结束");
}catch (Exception e){
//异常通知
System.out.println("访问方法:"+method.getName()+"出现异常:"+e);
// e.printStackTrace();
}finally {
//最终通知
System.out.println("访问方法:"+method.getName()+"销毁:");
}
return invoke;
}
});
}
}
5.测试类
package com.qwy.test;
import com.qwy.bean.Users;
import com.qwy.service.UsersService;
import com.qwy.service.impl.UsersServiceImpl;
import com.qwy.service.impl.UsersServiceLogProxy;
import org.junit.Test;
/**
* @author qwy
* @create 2021-04-23 22:13
**/
public class TestAOP {
@Test
public void test1(){
UsersService usersService= new UsersServiceImpl();
UsersService usersServiceLogProxy = new UsersServiceLogProxy(usersService).getUsersServiceLogProxy();
usersServiceLogProxy.save(new Users());
usersServiceLogProxy.delete(new Users());
usersServiceLogProxy.getUsersById(1);
usersServiceLogProxy.update(new Users());
}
}
执行结果:
访问方法:save开始
UsersService.save
访问方法:save结束
访问方法:save销毁:
访问方法:delete开始
访问方法:delete出现异常:java.lang.reflect.InvocationTargetException
访问方法:delete销毁:
访问方法:getUsersById开始
UsersService.getUsersById
访问方法:getUsersById结束
访问方法:getUsersById销毁:
访问方法:update开始
UsersService.update
访问方法:update结束
访问方法:update销毁:
从执行结果看,每个方法都被做了增强处理。