您的位置:首页 > 编程语言 > Java开发

java 静态代理模式学习(1)

2017-09-07 09:44 585 查看
http://blog.csdn.net/hejingyuan6/article/details/36203505

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


静态代理接口增加方法就的重新写代理类,很不方便,动态代理解决了这个问题,接下来看一下动态代理。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java aop