黑马程序员_ 动态代理




------- android培训java培训、期待与您交流!---------

一、动态代理的作用

动态代理就是运行期间根据要实现的接口或类,生成出一个子类字节码。这个动态产生的字节码就就是动态代理类,他实现或继承了父类的方法,可以由他来代替父类和拓展父类的功能。

JVM可以在运行期动态生成出类的字节码,这种动态生成的类往往被用作代理类,即动态代理类。



二、动态代理的三种实现

Class clazzProxy = Proxy.getProxyClass(Collection.class.getClassLoader(),Collection.class);		//第一个参数是动态类实现接口的类加载器,第二个参数是动态类实现的接口
Constructor proxyConstr = clazzProxy.getConstructor();		//取得代理的构造函数
Collection mInstance = (Collection)proxyContr.newInstance(new MyInvocationHandler());
		//通过代理实例化实现InvocationHandler接口的类
proxyConstr.newInstance(new InvocationHandler(){
	public Object invoke(Object proxy,Method method,Object[] arg){
	}
});




      Collection proxy2 = (Collection)constructor.newInstance(new InvocationHandler(){
						//用InvocationHandler的匿名子类的方式创建动态类(被代理的对象)
          public Object invoke(Object proxy, Method method, Object[] args)
                 throws Throwable {
             return null;
          }   
      });




Proxy.newProxyInstance(						//使用newProxyInstance(...)静态方法
	Collection.calss.geClassLoader(),
	new Class[]{Collection.classs),			//不是最后一个参数不可以用可变参数 
	new InvocationHandler(){
		public Object invoke(Object proxy,Method method,Object[] arg){
});
mInstance.add("dsdf");				//会调用invoke函数,参数里的method是add,args是“dsdf"



三、AOP(面向切面编程)
将要运行的代码封装到对象,然后运行对象的方法。

主类载入配置文件,把输入流给BeanFactory;
BeanFactory读出配置内容,新建Advice、Target对象传给proxyFactoryBean;
proxyFactoryBean里新建target的代理,并插入Advice类的方法。



					//载入配置文件
		InputStream ips = AopFrameworkTest.class.getResourceAsStream("config.properties");
		Object bean = new BeanFactory(ips).getBean("xxx");		//用BeanFactory产生xxx类型的对象
//配置文件中xxx的值,通过xxx.advice中的类定义的程序点具体要做的操作
xxx=cn.itcast.day3.aopframework.ProxyFactoryBean
xxx.advice=cn.itcast.day3.MyAdvice
xxx.target=java.util.ArrayList



	new InvocationHandler(){			//定义返回的动态类的InvocationHandler实例
		public Object invoke(Object proxy, Method method, Object[] args){
			advice.beforeMethod(method);		//在执行方法之前插入advice定义的方法实现切面操作的执行
			Object retVal = method.invoke(target, args);		//实质执行bean的方法








------- android培训java培训、期待与您交流!---------


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值