SpringProxy

Springとか使ってインジェクションかけたオブジェクトに対して
クラス検査とかするとたびたび見かける
packages.ClassName$$EnhancerByCGILIB$$xxxxxxxx
みたいなやつ。

どうにかしてCGILIBで生成されたクラスってことを
判別できないかなーと思い、ちょっと調べた。

Spring様のことですし、きっとそれが判別できるように、
何かインターフェースとか挟んでおいてくれたり
してるんじゃないかなーとの期待から、sysoutに適当に吐いてみた。

class ex.beans.Hoge$$EnhancerByCGLIB$$7a85fe65
interface org.springframework.aop.SpringProxy
interface org.springframework.aop.framework.Advised
interface net.sf.cglib.proxy.Factory
なんだ。ちゃんと挟んでくれてるじゃない。
とりあえず、SpringProxy実装してるかどうかで判断できそうな感じ。
Advisedのほうはadviceが張られてるかどうか見てるのかな?
ちゃんと確認してないから単語の感じからしか汲み取れてないけど。

対象クラスにpointcut張られてなかったりすると
そもそもクラス生成はされずに、もとのクラスが使用されるっぽい
pointcutはずしたりして試したらもとのクラスしか出力されなかった

class ex.beans.Hoge
Advisedのほうでインスタンス取り出すとどうなるのかなと、
試してみたところ、こちらでは#getTargetClass()により、
元のクラスが取得できる模様。
SpringProxy実装してるかどうかで確認するよか
こっち使って、もとのクラス取り出すほうが良いかも。