动态代理的实现3-实现aop功能的封装和配置
来源:互联网 发布:淘宝互刷收藏软件 编辑:程序博客网 时间:2024/05/16 02:41
- //一个通告或建议的接口
- public interface Advice {
- void afterMethod(Method method);
- void beforeMethod(Method method);
- }
- public class MyAdvice implements Advice{
- private long start;
- @Override
- public void afterMethod(Method method) {
- System.out.println("运行时间计算结束!!");
- System.out.println("共耗时:"+(System.currentTimeMillis()-start));
- System.out.println("------------------------");
- }
- @Override
- public void beforeMethod(Method method) {
- System.out.println("开始计算运行时间:");
- start=System.currentTimeMillis();
- System.out.println("所执行的方法:"+method.getName());
- }
- }
- Properties文件的配置
- #xxx=java.util.ArrayList
- xxx=aopframework.ProxyFactoryBean
- xxx.advice=aopframework.MyAdvice
- xxx.target=java.util.ArrayList
- /**
- * 负责创建目标类或代理类的实例对象,并通过配置文件实现切换
- *
- */
- public class BeanFactory {
- private Properties prop;
- public BeanFactory(InputStream is){
- prop=new Properties();
- try {prop.load(is);
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public Object getBean(String propkey){
- String className=prop.getProperty(propkey);
- Object bean=null;
- try {
- bean=Class.forName(className).newInstance();
- if(bean instanceof ProxyFactoryBean){
- String adviceName=prop.getProperty(propkey+".advice");
- String targetName=prop.getProperty(propkey+".target");
- try {
- Advice advice = (Advice) Class.forName(adviceName).newInstance();
- Object target = Class.forName(targetName).newInstance();
- ProxyFactoryBean beanproxy=(ProxyFactoryBean)bean;
- beanproxy.setAdvice(advice);
- beanproxy.setTarget(target);
- bean=beanproxy.getProxy();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- return bean;
- }
- }
- /**
- * 充当封装生成动态代理的工厂
- */
- public class ProxyFactoryBean {
- private Advice advice;
- private Object target;
- public Object getProxy() {
- Object coll=(Object) Proxy.newProxyInstance(
- target.getClass().getClassLoader(),
- target.getClass().getInterfaces(),
- new InvocationHandler(){
- @Override
- public Object invoke(Object proxy, Method method,
- Object[] args) throws Throwable {
- advice.beforeMethod(method);
- Object obj=method.invoke(target, args);
- advice.afterMethod(method);
- return obj;
- }
- });
- return coll;
- }
- public Advice getAdvice() {
- return advice;
- }
- public void setAdvice(Advice advice) {
- this.advice = advice;
- }
- public Object getTarget() {
- return target;
- }
- public void setTarget(Object target) {
- this.target = target;
- }
- }
- public class Test {
- public static void main(String[] args) {
- InputStream is=Test.class.getClassLoader().getResourceAsStream("config.properties");
- BeanFactory factory=new BeanFactory(is);
- Collection coll=(Collection) factory.getBean("xxx");
- coll.add("aaa");
- coll.add("222");
- System.out.println(coll.size());
- }
- /**
- * 运行结果
- 开始计算运行时间:
- 所执行的方法:add
- 运行时间计算结束!!
- 共耗时:0
- ------------------------
- 开始计算运行时间:
- 所执行的方法:add
- 运行时间计算结束!!
- 共耗时:0
- ------------------------
- 开始计算运行时间:
- 所执行的方法:size
- 运行时间计算结束!!
- 共耗时:0
- ------------------------
- 2
- */
- }
- 动态代理的实现3-实现aop功能的封装和配置
- 动态代理的实现3-实现aop功能的封装和配置 .
- 动态代理的实现3-实现aop功能的封装和配置
- 实现AOP功能的封装和配置
- 让动态生成的类成为目标类的代理-实现AOP功能的封装与配置
- 【实现AOP功能的封装与配置】
- 实现AOP的功能的封装与配置
- spring对AOP的支持(JDK的动态代理实现AOP和CGLIB实现AOP)
- 黑马程序员(八) 实现Aop功能的封装和配置的小程序
- Spring AOP 代理实现的两种方式: JDK动态代理 和 Cglib框架动态代理
- 加强2注解。泛型。类加载器及其委托机制。代理的概念与作用原理,AOP概念。实现AOP功能的封装与配置。类似Spring。
- Spring_AOP_Proxy AOP动态代理的实现
- Spring_AOP_Proxy AOP动态代理的实现 .
- Spring AOP 的实现原理----动态代理
- AOP的简单实现---动态代理机制
- AOP动态代理的简单实现
- AOP的JDK动态代理实现
- AOP的底层实现--JDK动态代理,CGLIB动态代理
- 动态代理的实现1-简单实现
- 动态代理的实现2-编写可生成代理和插入通告的通用方法
- opencv 播放进度读取
- Objective -C语言基础学习日志(五)
- 【C++系列】VC++ Directories editing in Tools>Options has been deprecated解决方法
- 动态代理的实现3-实现aop功能的封装和配置
- ISPA模板
- 关于利用Tcp库来实现文件传输
- WebApplication和WebSite和SLN文件
- jquery ajaxfrom表单提交代码
- 函数指针 一
- 说说循环缓冲区(Ring Buffer)
- 最长回文子串
- Test