2016-11-16 129 views
3

什麼這些下面的區別...AOP VS春季安全

@org.aspectj.lang.annotation.Aspect 
public class Test { 
    //@Pointcut, @Around etc etc.. 
} 

而且

public aspect Test { 

} 

,什麼是更好的中..

  • 春季使用安全安全&
  • AOP
春季應用

回答

7

檢查here

看點聲明由 org.aspectj.lang.annotation.Aspect註釋支持。聲明:

@Aspect 
public class Foo {} 

等同於:

public aspect Foo {} 

注意:第一種是彈簧檢測。後者需要AspectJ。

並針對第二個問題。比較是不可能的。因爲第一個是一個框架,後者是一個範例。 Spring安全使用AOP來保護方法調用,AOP本身不是一種安全機制。當然,除非你正在使用AOP構建自己的安全性,AOP正在重新發明輪子。

+0

這意味着如果我想自己定製我的安全部分,那麼Core AOP更好。爲了獲得有序的代碼,Spring Security Framework很好,不是嗎? –

+2

Spring是一款全面的安全套裝...它可以支持各種用例,所以我建議你查看文檔。 要創建一個功能安全性,您需要比AOP更多的功能,AOP幾乎不會攔截方法調用。保護需要更多。 你可以自己創建過濾器,提供者,控制器......但是爲什麼? Spring Security被用於保護各種項目,包括金融系統。 –

+0

當然,我會讀出Spring Security Doc。順便說一句,那Struts呢!我可以在我現有的struts1項目中使用AOP嗎? –

1

標記與@Aspect註解類Test會讓你的類的看點,意味着春天的ApplicationContextBeanFactory現在將讀取並掃描您的班級找advicespointcutsjoinpoints,你可以定義你的額外cross-cutting functinality(功能你保持獨立從你的業務邏輯)你想得到執行某些事件之前像一個方法調用之前,方法調用後,方法拋出一個異常等

AOP (Aspect-oriented programming)是設計模式,彈簧之後,以提供您的交叉功能而Spring Security是完整的彈簧框架的一部分工作,您可以使用它來保護您的應用程序

Spring Security內部使用AOP和過濾器來完成其工作。

1

第一個是註釋式語法,可以被Spring AOP和純AspectJ使用,第二個是本地AspectJ語法,只能在純AspectJ中使用,而不能在基於代理的Spring AOP中使用。但是,純粹的AspectJ(由AspectJ編譯器編譯)也可以併入到Spring項目中,如Spring手冊的章節Using AspectJ with Spring applications所述。

至於哪種方法更適合實現安全性,只要你沒有詳細描述你的用例,這就是一個哲學問題,但我的一般建議是:如果你仍然使用Spring框架,使用其安全機制。如果您只考慮使用Spring,因爲您想使用Spring AOP,我寧願建議您遠離僅用於單一用途的大型框架,並在您的POJO應用程序中使用純粹的AspectJ來實現安全性。