2010-04-25 88 views
2

是否可以將Java中的外部類字段訪問自動更改爲getter/setter調用,還可以隱藏公開的字段?我正在使用Javabeans,並且當字段屬性更改時(我們需要更改通知),這很重要。更改訪問getter/setter方法的字段

我發現cglib可以自動將屬性更改調用插入PropertyChangeSupport字段。我知道Project Lombok,但是這似乎修改了源代碼,並且不支持字段訪問修改。也許修改龍目島,這可能會得到支持,或者有其他解決方案嗎?

歡呼和預先感謝, 克里斯

+0

聽起來好像它不是更改javabean代碼本身的選項。這是真的?否則會有更簡單的方法。 – BalusC 2010-04-25 21:01:53

+0

嗯,什麼,真的。我想要的是,假設你有一個'k'字段'p'的對象,並且用戶通過k.p = 5或者其他東西訪問它。它應該改爲k.setP(5)。用於Eclipse的代碼轉換插件也是受歡迎的,但正如您所知,在狹窄的區域使用許多getters/setter可能會使代碼非常混亂。 – 2010-04-25 21:11:29

+0

只是使屬性'私人'?對不起,我現在完全忽略了這一點。 – BalusC 2010-04-25 21:12:50

回答

1

最簡單的辦法是修改API的客戶源。假設這不是一個選項,除非您至少能夠控制客戶端二進制文件並可以使用字節碼操作,否則無法以這種方式自動封裝字段。如果你有這樣的控制水平,那麼是的,cglib可能是一個選擇。但是,即使使用字節碼操作,也無法攔截java.lang.reflect.Field.set,因此您需要確保沒有任何內容使用反射修改字段。

你最好的選擇是打破API並引入setters/getters。這應該提醒您在創建API時始終使用適當的封裝。

0

AspectJ將允許您執行通知。您可以對類進行一些運行時編織,然後檢測某人何時更改實例變量或調用某個方法,然後採取所需的任何操作。
它不是膽小的!

不知道您改變訪問權限而不更改代碼是什麼意思?