反射+代理+框架=我的迷你型框架
来源:互联网 发布:深度linux deepin安装 编辑:程序博客网 时间:2024/05/16 11:50
这是我在看张孝祥老师的java教程视频之后写的代码
【1.制定一个借口Advice.java】
接口描述:此接口用于实现计算调用类代理方法所用的时间
package cn.itcast.wg.proxy.aop.framework;
import java.lang.reflect.Method;
public interface Advice {
void beforeMethod(Method method);
void afterMethod(Method method);
}
【2.写一个类AdviceTest.java实现Advice.java】
类描述用于实现Advice接口
package cn.itcast.wg.proxy.aop.framework;
import java.lang.reflect.Method;
public class AdviceTest implements Advice {
private long beginTime;
private long endTime;
public void afterMethod(Method method) {
endTime = System.currentTimeMillis();
System.out.println("执行" + method.getName() + "方法用了" + (endTime - beginTime) + "毫秒" );
}
public void beforeMethod(Method method) {
beginTime = System.currentTimeMillis();
}
}
【3.写代理生产工厂ProxyBeanFactory.java】
类描述生产代理类
package cn.itcast.wg.proxy.aop.framework;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyBeanFactory {
private Advice advice;
private Object target;
public ProxyBeanFactory() {
}
public ProxyBeanFactory(Advice advice, Object target) {
super();
this.advice = advice;
this.target = target;
}
public Object getProxy() {
return Proxy.newProxyInstance(
target.getClass().getClassLoader(),
target.getClass().getInterfaces(),
new InvocationHandler() {
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
// TODO Auto-generated method stub
advice.beforeMethod(method);
Object objVar = method.invoke(target, args);
advice.afterMethod(method);
return objVar;
}
});
}
}
【4.写返回代理的实现BeanFactory.java】
根据配置文件的信息返回代理,还是这个接口的实现类
package cn.itcast.wg.proxy.aop.framework;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
public class BeanFactory {
Properties properties = new Properties();
public BeanFactory(InputStream iso) {
try {
properties.load(iso);
iso.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public Object getBean(String name) {
Object obj = null;
try {
obj = Class.forName(properties.getProperty(name)).newInstance();
if(obj instanceof ProxyBeanFactory ) {
Advice advice = (Advice) Class.forName(properties.getProperty(name + ".advice")).newInstance();
Object target = Class.forName(properties.getProperty(name + ".target")).newInstance();
ProxyBeanFactory pFactory = new ProxyBeanFactory(advice,target);
return pFactory.getProxy();
}
} catch (Exception e) {
e.printStackTrace();
}
return obj;
}
}
【5.写自己的config.properties配置文件】
#xxx=java.util.ArrayList
xxx=cn.itcast.wg.proxy.aop.framework.ProxyBeanFactory
xxx.advice=cn.itcast.wg.proxy.aop.framework.AdviceTest
xxx.target=java.util.HashSet
【6.实验自己所写的框架BeanTest.java】
package cn.itcast.wg.proxy.aop.framework;
import java.io.InputStream;
import java.util.Collection;
public class BeanTest {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
InputStream iso = BeanTest.class.getResourceAsStream("config.properties");
BeanFactory beanFactory = new BeanFactory(iso);
Collection c = (Collection) beanFactory.getBean("xxx");
c.add(1);
}
}
- 反射+代理+框架=我的迷你型框架
- 几个通用的类,迷你型的Android下载框架
- 简单的反射框架应用
- 框架原理反射的应用
- 我的系统框架
- 我的JavaScript框架
- 我的学习框架
- 我的游戏框架
- 我的框架:简介
- 我的框架:控制器
- 我的框架:模板
- 我的框架:模型
- 我的php框架
- Android框架常用java基础知识:反射,注解,动态代理
- 迷你型的 Linux 系统
- 我的JS框架 meeko框架
- 框架的概念及用反射技术开发框架的原理
- 框架的概念及用反射技术开发框架的原理
- Use Case 中 include 与 extend 的区别
- microwindows简单小程序
- python读写UCS-2 big/little endian(utf-16-be/utf-16-le)格式的文件
- 游标 触发器 笔记
- DWR实例教程
- 反射+代理+框架=我的迷你型框架
- test by Writer
- 使用json
- 方法上的通用准则
- 网站页面静态化方案
- MFC(win32GUI)程序中显示Dos调试信息.console.显示控制台界面.标准输出.
- 全面认识自我策划人才的心理素质要求
- BLOB和CLOB的区别以及在ORALCE中的插入和查询操作
- WPF关于2D绘图的基础类简要