AOP01
SpringAOP是Spring framework中的一个核心设计,本文开始写一个系列主要有七种方式完成不同aop的实现,第一种用的是java的动态代理,使用的是Proxy代理类的静态方法newProxyInstance完成AOP的实现
IUserService.java
package com.qfedu.aop01;
import java.util.List;
public interface IUserService
/**
* 获取所有的用户对象列表
* @return
*/
List getAllUser();
/**
* 保存用户
* @param user
* @return
*/
boolean saveUser(T user);
/**
* 根据用户uid删除该uid对应的用户信息
* @param uid
* @return
*/
boolean deleteUser(int uid);
/**
* 更新指定用户信息
* @param obj
* @return
*/
boolean updateUser(T obj);
}
UserServiceImpl.java
package com.qfedu.aop01;
import java.util.ArrayList;
import java.util.List;
public class UserservcieImpl implements IUserService
@Override
public List
}
UserFactory.java
package com.qfedu.aop01;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class UserFactory {
public static IUserService getUserService(){
IUserService us = new UserservcieImpl();
MyAspect ma = new MyAspect();
/**
*
* 使用Proxy类的静态方法newProxyInstance来实现对于目标对象us的代理
* 目的是在原本us可以做的事情之前和之后可以做额外的事情
*
*/
IUserService ius = (IUserService) Proxy.newProxyInstance(UserFactory.class.getClassLoader(), us.getClass().getInterfaces(), new InvocationHandler() {
/**
* 代理对象调用的回掉方法
* @param proxy 代理对象
* @param method 被代理的方法
* @param args 被代理方法的参数列表对象
* @return 每个方法的最终返回值
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
ma.before();
//System.out.println(proxy);
System.out.println("000000000" + method);
System.out.println("000001111" + args);
Object obj = method.invoke(us, args);
ma.after();
System.out.println("111111111" + obj);
return obj;
}
});
return ius;
}
}
MyAspect.java
package com.qfedu.aop01;
public class MyAspect {
public void before(){
System.out.println("********before**********");
}
public void after(){
System.out.println("********after**********");
}
}
TestAOP01.java
package com.qfedu.aop01;
import org.junit.Test;
public class TestAOP01 {
@Test
public void testUserService(){
IUserService us = new UserservcieImpl();
System.out.println(us.getAllUser());
System.out.println(us.updateUser(new Object()));
System.out.println(us.deleteUser(1));
System.out.println(us.saveUser(new Object()));
System.out.println("===============");
IUserService us2 = UserFactory.getUserService();
System.out.println(us2.getAllUser());
System.out.println(us2.updateUser(new Object()));
System.out.println(us2.deleteUser(2));
System.out.println(us2.saveUser(new Object()));
}
}
运行结果:
--------getAllUser----------
[]
--------updateUser----------
true
--------deleteUser----------
false
--------saveUser----------
true
===============
********before**********
000000000public abstract java.util.List com.qfedu.aop01.IUserService.getAllUser()
000001111null
--------getAllUser----------
********after**********
111111111[]
[]
********before**********
000000000public abstract boolean com.qfedu.aop01.IUserService.updateUser(java.lang.Object)
000001111[Ljava.lang.Object;@6ae40994
--------updateUser----------
********after**********
111111111true
true
********before**********
000000000public abstract boolean com.qfedu.aop01.IUserService.deleteUser(int)
000001111[Ljava.lang.Object;@1a93a7ca
--------deleteUser----------
********after**********
111111111false
false
********before**********
000000000public abstract boolean com.qfedu.aop01.IUserService.saveUser(java.lang.Object)
000001111[Ljava.lang.Object;@3d82c5f3
--------saveUser----------
********after**********
111111111true
true