四年前,从进入到现在公司的第一天起,就被告知,禁止使用反射,听说是之前发生过一起因为反射使用不当导致的生产事故,致使我对Java的反射没有过太多研究,虽然知道Spring也用到了反射,但很多细节没有去了解,最近一个关于日志的需求,用到了反射,在这里记录一下学习反射的过程。需求的场景是,我们给客户的业务系统提供了API,客户在调用API时当然会记录日志,我们在API内使用了logback,并且引入了logback的jar包,那么问题来了,经常会遇到引入的logback jar包和客户冲突的情况,所以api应该尽可能少的引入第三方依赖,为了解决这个问题,我们把logback进行了包重构,避免了jar包冲突的问题,但是也带来了新的问题,客户需要依赖我们重构之后的jar包,有些患有深度强迫症的客户偏要说,我已经引入了官方的logback 依赖,为什么还要用你重构之后的jar,你提供的这个是不是安全?跟领导讨论之后,决定提高API的灵活性,默认使用重构之后的logback,如果真遇到这种变态客户,就使用原生的logback依赖,这里就免不了要用到反射,代码里不能使用强引用(即引用带有完整包路径的class),而是需要程序在运行时判断是否能加载到重构之后的类,如果不能,就去加载原生的类,然后实例化,再调用对象的方法。未完待续。
Java Reflection 学习
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
- 第一个例子是同一实例方法加锁和不加锁在多线程情况下的访问情况,代码如下: package test.caipiao...