本项目演示了如何利用javassist在运行时动态生成class加载到ioc容器中执行aop拦截
Jsoup是在爬虫工作中非常好用的一个工具,自带的请求工具org.jsoup.helper.HttpConnection也非常好用,其对外暴露为Jsoup.connect(String url);方法; 最终执行请求都是execute();方法,所以我想在execute()时执行一些日志的操作。
1 Jsoup默认Content-Type为multipart/form-data,因此如果请求体为json字符串时会URLEncoder,从而导致服务端收到后得先URLDecoder
2 配合LoginInfo类实现cookie自动管理
3 随心所欲的AOP切入支持
拉取代码后执行单元测试
HttpConnectionTest
即可看到效果
因为HttpConnection类只有一个private无参构造方法,所以无法直接AOP。
org.jsoup.helper.HttpConnection implements org.jsoup.Connection HttpConnection只有私有无参构造
1 首先创建一个抽象类me.kagura.HttpConnection实现org.jsoup.Connection接口
2 然后利用javassist在项目启动后@PostConstruct将org.jsoup.helper.HttpConnection复制一份org.jsoup.helper.HttpConnectionX
2.1 HttpConnectionX继承自抽象类me.kagura.HttpConnection
2.2 并将原private无参构造方法改为public
2.3 编译并加载该类
3 然后编写常规AOP代码即可
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。