package com.wkb.springaop.aop.aspect;
import org.apache.log4j.Logger;
import org.aspectj.lang.JoinPoint;
public class LogAspect {
private final static Logger LOG = Logger.getLogger(LogAspect.class);
public void before1(JoinPoint joinPoint){
LOG.info("调用方法之前执行" + joinPoint);
}
public void after(JoinPoint joinPoint){
LOG.info("调用之后执行" + joinPoint);
}
public void afterReturn(JoinPoint joinPoint){
LOG.info("调用获得返回值之后执行" + joinPoint);
}
public void afterThrow(JoinPoint joinPoint){
LOG.info("抛出异常之后执行" + joinPoint);
}
private void testReflect(){
System.out.println("私有方法");
}
private void testReflectString(String a ){
System.out.println("私有方法带参数:"+a);
}
}
其中有获取构造方法和公共方法及私有方法,并通过解除私有属性执行私有方法,
package com.wkb.springaop.aop.aspect;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
/**
* Created by wkb on 2018/9/6.
*/
public class ReflectTest {
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException {
Class clazz = Class.forName("com.wkb.springaop.aop.aspect.LogAspect");
//获取构造方法
Constructor[] cs = clazz.getConstructors();
for (Constructor a : cs){
System.out.println(a);
}
System.out.println("------1111------");
//获取共有方法
Method[] methods = clazz.getMethods();
for(int i = 0;i<methods.length;i++){
System.out.println(methods[i]);
}
System.out.println("------22222------");
//获取公共自己声明和私有方法
Method[] methods2 = clazz.getDeclaredMethods();
for(int i = 0;i<methods2.length;i++){
System.out.println(methods2[i]);
}
System.out.println("------33333------");
//获取固定私有方法
Method testRe = clazz.getDeclaredMethod("testReflect");
System.out.println(testRe);
//解除私有限定
testRe.setAccessible(true);
Object ob = clazz.getConstructor().newInstance();
testRe.invoke(ob);
System.out.println("--------4444444----");
//获取固定私有方法
Method testRe2= clazz.getDeclaredMethod("testReflectString",String.class);
System.out.println(testRe2);
testRe2.setAccessible(true);
Object ob2 = clazz.getConstructor().newInstance();
testRe2.invoke(ob2,"vvvvv");
}
}
具体的可以看下面文章:https://blog.youkuaiyun.com/sinat_38259539/article/details/71799078