Javassist。主要思想是什么,實(shí)際用途是什么?
一個(gè)常見的應(yīng)用是在運(yùn)行時(shí)生成代理類,即在運(yùn)行時(shí)創(chuàng)建一個(gè)子類,以攔截所有方法調(diào)用。例子:
使用代理來攔截對(duì)實(shí)體的方法調(diào)用以實(shí)現(xiàn)延遲加載,即,在首次訪問對(duì)象時(shí)從數(shù)據(jù)庫中獲取對(duì)象。
在 使用代理服務(wù)器來實(shí)現(xiàn)其AOP的支持,其中除其他事項(xiàng)外大國的聲明性事務(wù)的支持。它還使用代理來強(qiáng)制適當(dāng)?shù)淖饔糜颉?/p>
使用代理來實(shí)現(xiàn)容器管理的事務(wù),授權(quán)檢查以及應(yīng)用用戶定義的攔截器。
實(shí)現(xiàn)還必須代理受管Bean,以確保適當(dāng)?shù)淖饔糜颉N覒岩伤麄円彩褂米止?jié)碼工程庫。
最近使用Javassist截取所有方法調(diào)用,并僅在第一次調(diào)用時(shí)委托給超級(jí)實(shí)現(xiàn),從而為方法返回值實(shí)現(xiàn)透明的緩存。
請(qǐng)注意,它java.lang.reflect.Proxy可以在運(yùn)行時(shí)生成代理類,但只能實(shí)現(xiàn)接口,而不能擴(kuò)展類。以上所有用例都需要類的代理。
解決方法我知道Javassist是一個(gè)Java庫,提供了一種操作應(yīng)用程序的Java字節(jié)碼的方法。
好的,但是為什么我們需要操縱字節(jié)碼?
有什么真實(shí)的例子嗎?任何真正的應(yīng)用程序,javassist在哪里使用?
