iT邦幫忙

0

java aop 是否可以用在原生物件上?

  • 分享至 

  • xImage

事情是這樣的,最近公司又要開始一連串的 fortify 地獄,

其中一項要修改的風險是,傳入 File 的路徑都需要做檢測跟過濾,

不過因為被檢查的 project 是陳年老案子,當年寫的人也都不太在意這些事情,
所以變成現在要面對數百隻 Class 去修改跟檢查 File 傳入路徑。

然後剛剛改到一半突然想到,這需求不曉得能不能用 AOP 去切入,
當建構 File 時把路徑抓出來檢測就好。

但是測試了一下,發現怎麼寫好像都不會觸發 AOP 設定,
不曉得是我寫錯,還是不可以這樣寫。

有人嘗試過這件事情嗎?還麻煩給我一些意見,非常感謝~~
https://ithelp.ithome.com.tw/upload/images/20240628/20092600n0pOWmwCfq.png

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
Chikuwa
iT邦新手 2 級 ‧ 2024-06-29 00:52:09

如果我的想法沒錯的話,Spring 的 AOP 是用在 bean 上面,會對 bean 包一層代理(proxy)

所以不能用在原生物件或自定義的物件上

swallowcc iT邦新手 4 級 ‧ 2024-06-29 01:09:07 檢舉

感謝回應。

對自定義的物件做 AOP 沒啥問題,我寫過不少次。
除非我們對自定義物件的解釋不一樣。

至於原生物件的話,ChatGPT 給我的答案是使用 AspectJ。

『在 Spring AOP 中,無法攔截 Java 標準庫類的方法調用。Spring AOP 是基於代理的,只能攔截 Spring 容器管理的 bean 的方法調用。要攔截 Java 標準庫中的類(例如 java.io.File),需要使用 AspectJ,這是一種靜態織入(或加載時織入)的技術,可以攔截任意類的方法調用。』

但後續流程有那麼一點麻煩,
如果沒有比較好的做法的話,應該就直接放棄這個方向了。

不明
【**此則訊息已被站方移除**】
不明
【**此則訊息已被站方移除**】

我要發表回答

立即登入回答