------------------------------------------实现AOP------------------------------------------
/**
* 使用java的反射
* 进行aop功能的模拟
* @author scipio
* @created 2013-10-21
*/
public class Aop {
private static CrossCutting cut=new CrossCutting();
private static ReflectUtils rfBefore=new ReflectUtils(cut,"before");
private static ReflectUtils rfAfter=new ReflectUtils(cut,"after");
public static void beforeAdvice(Object target,String methodName,Object ... params){
Class cls=target.getClass();
Method[] methods=cls.getDeclaredMethods();
for(int i=0;i<methods.length;i++){
if(methods[i].getName().equals(methodName)){
rfBefore.invokeMethod();
new ReflectUtils(target,methodName,params).invokeMethod();
}
}
}
public static void afterAdvice(Object target,String methodName,Object... params){
Class cls=target.getClass();
Method[] methods=cls.getDeclaredMethods();
for(int i=0;i<methods.length;i++){
if(methods[i].getName().equals(methodName)){
new ReflectUtils(target,methodName,params).invokeMethod();
rfAfter.invokeMethod();
}
}
}
public static void aroundAdvice(Object target,String methodName,Object... params){
Class cls=target.getClass();
Method[] methods=cls.getDeclaredMethods();
for(int i=0;i<methods.length;i++){
if(methods[i].getName().equals(methodName)){
rfBefore.invokeMethod();
new ReflectUtils(target,methodName,params).invokeMethod();
rfAfter.invokeMethod();
}
}
}
}
----------------------------------准备测试所需要的接口 类----------------------------------
/**
* 要被拦截的接口
* @author scipio
* @created 2013-10-21
*/
public interface Crud {
public void add(String user);
public void modify(String user);
public void delete(String user);
}
/**
* 要被拦截的接口的实现类
* @author scipio
* @created 2013-10-21
*/
public class CrudImpl implements Crud {
@Override
public void add(String user) {
System.out.println("new user:");
}
@Override
public void modify(String user) {
System.out.println("modify user");
}
@Override
public void delete(String user) {
System.out.println("delete user");
}
}
-----------------------------------------测试----------------------------------------------
public class Test {
public static void main(String[] args){
Crud crud=new CrudImpl();
Aop.beforeAdvice(crud,"modify","persia"); //类对象 要被拦截(调用)的方法名 该方法所
需要的参数值(参数是需要先后顺序的 所以
这里要注意)
}
}
/**
* 使用java的反射
* 进行aop功能的模拟
* @author scipio
* @created 2013-10-21
*/
public class Aop {
private static CrossCutting cut=new CrossCutting();
private static ReflectUtils rfBefore=new ReflectUtils(cut,"before");
private static ReflectUtils rfAfter=new ReflectUtils(cut,"after");
public static void beforeAdvice(Object target,String methodName,Object ... params){
Class cls=target.getClass();
Method[] methods=cls.getDeclaredMethods();
for(int i=0;i<methods.length;i++){
if(methods[i].getName().equals(methodName)){
rfBefore.invokeMethod();
new ReflectUtils(target,methodName,params).invokeMethod();
}
}
}
public static void afterAdvice(Object target,String methodName,Object... params){
Class cls=target.getClass();
Method[] methods=cls.getDeclaredMethods();
for(int i=0;i<methods.length;i++){
if(methods[i].getName().equals(methodName)){
new ReflectUtils(target,methodName,params).invokeMethod();
rfAfter.invokeMethod();
}
}
}
public static void aroundAdvice(Object target,String methodName,Object... params){
Class cls=target.getClass();
Method[] methods=cls.getDeclaredMethods();
for(int i=0;i<methods.length;i++){
if(methods[i].getName().equals(methodName)){
rfBefore.invokeMethod();
new ReflectUtils(target,methodName,params).invokeMethod();
rfAfter.invokeMethod();
}
}
}
}
----------------------------------准备测试所需要的接口 类----------------------------------
/**
* 要被拦截的接口
* @author scipio
* @created 2013-10-21
*/
public interface Crud {
public void add(String user);
public void modify(String user);
public void delete(String user);
}
/**
* 要被拦截的接口的实现类
* @author scipio
* @created 2013-10-21
*/
public class CrudImpl implements Crud {
@Override
public void add(String user) {
System.out.println("new user:");
}
@Override
public void modify(String user) {
System.out.println("modify user");
}
@Override
public void delete(String user) {
System.out.println("delete user");
}
}
-----------------------------------------测试----------------------------------------------
public class Test {
public static void main(String[] args){
Crud crud=new CrudImpl();
Aop.beforeAdvice(crud,"modify","persia"); //类对象 要被拦截(调用)的方法名 该方法所
需要的参数值(参数是需要先后顺序的 所以
这里要注意)
}
}