当前位置: 首页 > news >正文

哪个网站做售楼推广好靠谱的广告联盟

哪个网站做售楼推广好,靠谱的广告联盟,怎么用网站挂QQ,制作企业网站的写在前面 本文看下使用bytebuddy如何实现抽象类,并在子类中添加自定义注解。 1:代码 1.1:准备基础代码 类和方法注解 package com.dahuyou.bytebuddy.cc.mine;import java.lang.annotation.ElementType; import java.lang.annotation.Re…

写在前面

本文看下使用bytebuddy如何实现抽象类,并在子类中添加自定义注解。

1:代码

1.1:准备基础代码

  • 类和方法注解
package com.dahuyou.bytebuddy.cc.mine;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotationOnClazz {String loveThing() default "";int age();
}package com.dahuyou.bytebuddy.cc.mine;import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface MyAnnotationOnMethod {String whatYouHate() default "every thing";long yourMoneyAmount() default 0L;
}
  • 抽象类
package com.dahuyou.bytebuddy.cc.mine;public abstract class MyAbstractCls<T> {public abstract T sayHiMan(String param);
}

1.2:bytebuddy程序

package com.dahuyou.bytebuddy.cc.mine;import net.bytebuddy.ByteBuddy;
import net.bytebuddy.description.annotation.AnnotationDescription;
import net.bytebuddy.description.type.TypeDescription;
import net.bytebuddy.dynamic.DynamicType;
import net.bytebuddy.implementation.MethodDelegation;
import net.bytebuddy.matcher.ElementMatchers;
import java.io.File;public class TTTT {public static void main(String[] args) throws Exception {DynamicType.Unloaded<?> dynamicType= new ByteBuddy().subclass(TypeDescription.Generic.Builder.parameterizedType(MyAbstractCls.class, String.class).build()).name(MyAbstractCls.class.getName().concat(".").concat("MyAbstractClsImpl")).method(ElementMatchers.named("sayHiMan")) // 设置要拦截的方法.intercept(MethodDelegation.to(MyInterceptor.class)) // 设置执行具体逻辑的代理.annotateMethod( AnnotationDescription.Builder.ofType(MyAnnotationOnMethod.class).define("whatYouHate", "TMD,啥也不是啊").define("yourMoneyAmount", 350L).build()) // 设置类上的注解,以及其属性值.annotateType(AnnotationDescription.Builder.ofType(MyAnnotationOnClazz.class).define("loveThing", "啥也不是,啥也不管").define("age", 56).build()) // 设置方法上的注解以及其属性值.make();// 写到类文件中dynamicType.saveIn(new File(TTTT.class.getResource("/").getPath()));System.out.println("-----华丽的分割线----");// 获取类上的注解Class<MyAbstractCls<String>> aClass= (Class<MyAbstractCls<String>>) Class.forName("com.dahuyou.bytebuddy.cc.mine.MyAbstractCls.MyAbstractClsImpl");MyAnnotationOnClazz myAnnotationOnClazz = aClass.getAnnotation(MyAnnotationOnClazz.class);System.out.println("myAnnotationOnClazz.loveThing: " + myAnnotationOnClazz.loveThing());System.out.println("myAnnotationOnClazz.age: " + myAnnotationOnClazz.age());// 获取方法上的注解MyAnnotationOnMethod myAnnotationOnMethod = aClass.getDeclaredMethod("sayHiMan", String.class).getAnnotation(MyAnnotationOnMethod.class);System.out.println("myAnnotationOnMethod.whatYouHate: " + myAnnotationOnMethod.whatYouHate());System.out.println("myAnnotationOnMethod.yourMoneyAmount: " + myAnnotationOnMethod.yourMoneyAmount());System.out.println("-----华丽的分割线----");// 执行MyAbstractCls<String> stringMyAbstractCls = aClass.newInstance();System.out.println(stringMyAbstractCls.sayHiMan("helloooooo"));}
}

其中通过annotateMethod方法设置子类方法上的注解,通过annotateType设置子类类上的注解,运行一下:

-----华丽的分割线----
myAnnotationOnClazz.loveThing: 啥也不是,啥也不管
myAnnotationOnClazz.age: 56
myAnnotationOnMethod.whatYouHate: TMD,啥也不是啊
myAnnotationOnMethod.yourMoneyAmount: 350
-----华丽的分割线----
拦截了,参数是:hellooooooProcess finished with exit code 0

查看生成的字节码:

package com.dahuyou.bytebuddy.cc.mine.MyAbstractCls;import com.dahuyou.bytebuddy.cc.mine.MyAbstractCls;
import com.dahuyou.bytebuddy.cc.mine.MyAnnotationOnClazz;
import com.dahuyou.bytebuddy.cc.mine.MyAnnotationOnMethod;
import com.dahuyou.bytebuddy.cc.mine.MyInterceptor;@MyAnnotationOnClazz(loveThing = "啥也不是,啥也不管",age = 56
)
public class MyAbstractClsImpl extends MyAbstractCls<String> {@MyAnnotationOnMethod(whatYouHate = "TMD,啥也不是啊",yourMoneyAmount = 350L)public String sayHiMan(String var1) {return MyInterceptor.intercept(new Object[]{var1});}public MyAbstractClsImpl() {}
}

写在后面

参考文章列表

字节码编程bytebuddy之监控方法执行耗时 。

http://www.ds6.com.cn/news/28542.html

相关文章:

  • 网站建设答辩恩施seo整站优化哪家好
  • 自己做网站需要花钱吗搜索引擎优化百度百科
  • 网站开发课程安排全网营销公司
  • 营销品牌有哪些seo广告投放
  • 网页设计英文seo初学教程
  • 服装服饰东莞网站建设营销网站建设价格
  • 丹阳高铁站对面的规划a5站长网网站交易
  • 手机可做兼职的网站百度怎么提交收录
  • 免费开源企业网站程序成都关键词优化报价
  • 网站背景磨砂灰背景怎么做网站内容检测
  • 网站推广其他方案内容如何在网上推广自己的产品
  • 博客网站做外贸可以吗网络营销的现状分析
  • 柳林网站建设中国网络营销公司排名
  • 如何在腾讯云做网站电商平台怎么推广
  • 如何利用fortran语言建设网站开网店3个月来亏了10万
  • 无锡网站seo顾问简单的网页设计作品
  • 服装网站建设准备厦门seo公司
  • 免费培训学校网站源码8大营销工具
  • 北京云网站建设网络营销推广外包平台
  • wordpress 文章采集seo关键词排名优化价格
  • 做网站能赚钱吗全球疫情今天最新消息
  • 南京机关建设网站网络事件营销案例
  • 网站建设 文件源代码约定湖南疫情最新消息今天
  • 医院网站建设方案企业网站分析报告
  • 网络营销跟做网站有什么区别竞价托管外包哪家好
  • 濮阳全员核酸检测二十个优化
  • 如何选择怎样掀开链接百度seo收费
  • 学做各种糕点的网站百度爱采购官网
  • 深圳做网站公免费创建个人网页
  • 自然资源网站官网百度的推广方式有哪些