【实现AOP功能的封装与配置】

工厂类BeanFactory负责创建目标类或代理类的实例对象,并通过配置文件实现切换。其getBean方法根据参数字符串返回一个相应的实例对象,如果参数字符串在配置文件中对应的类名不是ProxyFactoryBean,则直接返回该类的实例对象,否则,返回ProxyFactoryBean对象的getProxy方法返回的代理类。

AopFrameworkTest.java

package com.xiaozhi.proxy;


import java.io.InputStream;
import java.util.Collection;

public class AopFrameworkTest {

	public static void main(String[] args) throws Exception {
		InputStream ips = AopFrameworkTest.class.getResourceAsStream("config.properties");
		Object bean = new BeanFactory(ips).getBean("xxx");
		System.out.println(bean.getClass().getName());
		((Collection)bean).clear();
	}

}


config.properties

#xxx=java.util.ArrayList
xxx=com.xiaozhi.proxy.ProxyFactoryBean
xxx.advice=com.xiaozhi.proxy.MyAdvice
xxx.target=java.util.ArrayList

BeanFactory.java

package com.xiaozhi.proxy;


import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class BeanFactory {
	Properties props = new Properties();
	public BeanFactory(InputStream ips){
		try {
			props.load(ips);
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	
	public Object getBean(String name){
		String className = props.getProperty(name);
		Object bean = null;
		try {
			Class clazz = Class.forName(className);
			bean = clazz.newInstance();
		} catch (Exception e) {
			e.printStackTrace();
		} 
		if(bean instanceof ProxyFactoryBean){
			Object proxy = null;
			ProxyFactoryBean proxyFactoryBean = (ProxyFactoryBean)bean;
			try {
				Advice advice = (Advice)Class.forName(props.getProperty(name + ".advice")).newInstance();
				Object target = Class.forName(props.getProperty(name + ".target")).newInstance();
				proxyFactoryBean.setAdvice(advice);
				proxyFactoryBean.setTarget(target);
				proxy = proxyFactoryBean.getProxy();
			} catch (Exception e) {
				e.printStackTrace();
			}
			return proxy;
		}
		return bean;
	}
}
ProxyFactoryBean.java

package com.xiaozhi.proxy;


import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyFactoryBean {

	private Advice advice;
	private Object target;
	
	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  Object getProxy() {
		return  Proxy.newProxyInstance(
				target.getClass().getClassLoader(),
				target.getClass().getInterfaces(), 
		new InvocationHandler() {
			@Override
			public Object invoke(Object proxy, Method method, Object[] args)throws Throwable 
			{
				advice.beforeMehotd();
				System.out.println(method.getName());
				Object object=method.invoke(target, args);
				advice.afterMehotd();
				return object;
			}
		});
	}

}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Apect c++ 教程 + 实例 +论文 +期刊 AOP下载 搜集了 万方数据库 相关论文 期刊 以及网上 这方面几乎所有网页 都是自己学习之后留下来的 免去了大家搜集资料整理的麻烦 万方账号还是找别人借的~~~ 网上这方面 特别是c++可谓少之又少 搜集不容易 所以资源分高些 一些介绍 面向方面(aspect)的程序设计方法 程 虎 摘要 面向方面的程序设计(Aspect—Oriented Programming, AOP)是一种很有前途的新型程序设计 方法,它是面向过程、面向对象方法的进一步发展。通过引入方面概念,改进关注点的分离(separation of concerns),减少代码缠结(code tangling)解决横切关注点(cross cutting concerns)的问题, 提高软件质量和效率。 自1997年AOP以来的7年间,全球已开展大量有关研究与开发工作,并自2002年起每年召开专门 的国际学术会议(International conf .on Aspect-Oriented Software Development,AOSD)探讨问题, 交流取得的果。 自1997 年首次在欧洲面向对象会议上提出AOP 以来的7 年间,全球已开展大量有关 研究与开发工作,并自2002 年起,每年春天分别在欧洲和美国轮流召开专门的面向方面软 件开发(AOSD )国际学术会议。第1 届是2002 年4 月在荷兰Enschede 召开,第2 届是 2003 年3 月在美国波士顿召开,第3 届是2004 年3 月在英国Lancaster 召开,第4 届将于 2005 年3 月在美国芝加哥召开。前三届的与会者括美国、加拿大、荷兰、英国、法国、 德国、比利时、瑞士、西班牙、爱尔兰、丹麦和日本、以色列等。除了Xerox 公司,美国 IBM 公司的纽约Watson 研究中心,德国西门子公司和日本东芝公司等都投入研发,欧美 和日本的许多大学也在进行研究,我国北京大学和西安电子科技大学的软件研究所也对 AOP 给以关注并开展了一些研究开发工作。 从近年的发展来看,研究开发AOP 的角度很多,有的研究语言,有的研究规约和设计, 有的研究实现,应用还比较少,只是为研究而做些实例试验。但从各种刊物和会议上的报 告交流来看,提出了许多问题,并对不少问题进行了深入的分析研究,有的已提出解决方 案,并取得了初步果。 面向对象方法技术从语言角度提出后,已在软件技术方面取得突破,并独树一帜,影 响操作系统、数据库、编译和网络软件的研发。现在AOP 也有类似情况,已有人在研究其 对操作系统、中间件等的研发作用,并已有一些文章发表。预计AOP 也会对软件技术发展 产生影响,希望我国软件工作者能适当投入力量,关注和进行AOP 的研发工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值