黑马程序员_动态代理的三种实现

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

第一种:

Constructor constructor = clazzProxy.getConstructor(InvocationHandler.class);
Collection proxy = (Collection) constructor.newInstance(new MyInvocationhandler());

//MyInvocationhandler为实现InvocationHandler接口的类作为参数传入
System.out.println(proxy);

第二种:

Collection proxy2 = (Collection) constructor.newInstance(new InvocationHandler() {

public Object invoke(Object proxy, Method method,Object[] args) throws Throwable {
return null;
}

});// 这种方式 同第一种类似,只不过是将参数换成实现InvocationHandler接口的子类,而且是内部类

第三种:

final ArrayList target=new ArrayList();

Collection proxy3 = (Collection) Proxy.newProxyInstance(

Collection.class.getClassLoader(),
new Class[] { Collection.class },

new InvocationHandler() {

public Object invoke(Object proxy, Method method,
Object[] args) throws Throwable {
retObj = method.invoke(target, args);

returnretObj;

}
});

proxy3.add("abcd");
System.out.println(proxy3);

//这种方法即使用Proxy类中一个静态方法newProxyInstance(ClassLoader loader.class<?>[] interfaces,InvocationHandler h)创建。

注:当执行proxy3.add("abcd");时,代理对象proxy3对应invoke方法中proxy参数;.add方法对应invoke方法中method参数;而"abcd"参数则对应invoke方法中args参数,InvocationHandler接口的执行原理就是如此。

如果把目标对象和在代理类中添加的系统功能封装成对象传入代理类,即面向方面编程:把切面的代码以对象的方式进行封装,传给代理类。

例如:

public static Object getProxy(final Object target, final Advice advice) {
Object proxy3 = Proxy.newProxyInstance(

target.getClass().getClassLoader(),

target.getClass().getInterfaces(),
new InvocationHandler() {

@Override
public Object invoke(Object proxy, Method method,Object[] args) throws Throwable {
advice.beforeExecute(method);
Object retVal = method.invoke(target, args);
advice.afterExecute(method);

return retVal;
}
});
return proxy3;

}
//advice是一个接口,它有两个方法,在它的实现类中实现在代理类中其它系统功能,即把系统功能封装成advice对象,以参数形式传入获得代理类的方法中。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python是一种编程语言,而"黑马程序员"是一个培训机构。在Python中,可以使用print语句来输出文本。例如,通过运行以下代码:print("零基础,学Python, 月薪过万,就来黑马程序员。"),可以将"零基础,学Python, 月薪过万,就来黑马程序员。"这个文本输出到屏幕上。 除了输出文本,Python还可以定义变量并进行打印,例如:a = 666,b = 3.14,c = "零基础,学Python, 月薪过万,就来黑马程序员。",然后使用print语句打印这些变量。 无论是输出文本还是打印变量,在Python中都可以使用print语句来实现。同时,注释是在代码中用来解释和说明代码的部分,通过注释可以提供对代码的理解和解释。所以,如果你想在Python程序中输出"黑马程序员",你可以使用print语句来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [黑马程序员最新Python教程——第一阶段(1)](https://blog.csdn.net/weixin_46225503/article/details/126850291)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [黑马程序员---Python高级技巧编程](https://blog.csdn.net/qq_45893319/article/details/129965089)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值