2016-02-04 30 views
0

我正在擴展一個帶有一點點Spring AOP的應用程序。它所做的是從數據庫中檢索數據並將其映射到一個對象。這對於10.000個條目需要大約7-8秒。但是,僅僅在一個方面添加AOP時,它會突然花費大約50秒。該應用程序的性能非常關鍵,迄今爲止我無法想出如何使其更快的任何想法。我猜想代理的創建正在減慢它的速度。調整/加速Spring AOP

更多信息

針對每個條目的對象都被註解範圍@Scope(scopeName=ConfigurableBeanFactory.SCOPE_PROTOTYPE)和填充之前從應用程序上下文E object = appCtx.getBean(clazz.getName(), clazz);檢索。填充是通過反射和遞歸方法完成的。

方面,僅僅是註冊execution(public void <package>.<Class>+.set*(..))和AOP通過@EnableAspectJAutoProxy

+1

那麼對於每個setter,你現在突然執行額外的邏輯,從上下文中獲取一個bean比'new Class()'更重。所以最後所有額外的毫秒將加起來。不是一個單一的,但10000個條目將加起來。 –

+0

我意識到這樣的事實:它會隨着所有這些附加的東西變慢,但由6-7倍的因素?我的意思是,額外的方面邏輯甚至在創建對象時都沒有執行。我通過反射直接在場上填充物體。從/通過應用程序上下文加載/創建對象也沒那麼糟糕。如果我只刪除了@ @ Aspect,它仍然約爲7-8秒。任何想法如何調整它呢? – RaHe

+1

不,因爲你不會做太多事情。你得到一個代理,代理意味着開銷。無論反思是否存在方法調用,如果需要應用ti,則需要檢查點削減。如果你想要更多的速度使用加載或編譯時間編織而不是代理。 –

回答

0

使用AspectJ代替Spring AOP中的伎倆使一些特定類的所有制定者和它的子類。現在我擁有AOP功能,而且性能沒有任何明顯的損失。