java 的代理模式为aop提供了,动态记录方法执行的理论基础,简单的配置即可记录方法执行前后中,控制方法的执行,现在看一下静态代理:
静态代理:目标接口提供了,很多方法,现在提供一个实现类和代理类,他们都去继承目标接口,代理类为实现类作一个封装,为实现类的方法提供方法执行前,后的方法或者判断方法执行的条件,来记录和控制方法的执行
代码如下:
提供一个接口
package com.lzkj.kedacollege.aop;
public interface Sleep {
public void sleepTime();
}
实现类
package com.lzkj.kedacollege.aop;
public class Cat implements Sleep{
public void sleepTime() {
System.out.println("cat is sleeping");
}
}
代理类
package com.lzkj.kedacollege.aop;
import java.lang.reflect.Method;
import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;
public class SleepReady implements MethodBeforeAdvice,AfterReturningAdvice{
public void afterReturning(Object arg0, Method arg1, Object[] arg2,
Object arg3) throws Throwable {
// TODO Auto-generated method stub
System.out.println("eat food");
}
public void before(Method arg0, Object[] arg1, Object arg2)
throws Throwable {
// TODO Auto-generated method stub
System.out.println("jieshou");
}
}
测试
package com.lzkj.kedacollege.aop;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class AopTest {
public static void main(String[] args){
ApplicationContext appCtx = new ClassPathXmlApplicationContext("spring-context.xml");
Sleep sleeper = (Sleep)appCtx.getBean("cat");
sleeper.sleepTime();
}
}
结果:
jieshou
cat is sleeping
eat food
静态代理接口增加方法就的重新写代理类,很不方便,动态代理解决了这个问题,接下来看一下动态代理。