以下这些有什么区别......
@org.aspectj.lang.annotation.Aspect
public class Test {
//@Pointcut, @Around etc etc..
}
和
public aspect Test {
}
在...之间使用安全性更好。
在春季应用
答案 0 :(得分:8)
检查here
支持Aspect声明 org.aspectj.lang.annotation.Aspect annotation。声明:
@Aspect public class Foo {}
相当于:
public aspect Foo {}
注意:第一个是春天检测到的。后者需要AspectJ。
对于第二个问题。比较是不可能的。因为第一个是框架,后者是范例。 Spring安全性使用AOP来保护方法调用,AOP本身不是一种安全机制。当然,除非您使用AOP构建自己的安全性,AOP正在重新发明轮子。
答案 1 :(得分:2)
使用Test
注释标记您的班级@Aspect
会使您的班级成为一个看点,意味着Spring ApplicationContext
或BeanFactory
现在会读取并扫描您的班级找到advices
,pointcuts
,joinpoints
,您可以定义您希望为某些事件执行的额外cross-cutting functinality
(与业务逻辑分开的功能)在方法调用之前,在方法调用之后,在方法抛出异常之后等。
AOP (Aspect-oriented programming)
是设计模式,春天随后为您提供交叉功能,而Spring Security
是完整弹簧框架的一部分,您可以使用它来保护您的应用程序
Spring Security在内部使用AOP和Filters来完成其工作。
答案 2 :(得分:2)
第一个是注释样式语法,可以由Spring AOP和纯AspectJ使用,第二个是原生AspectJ语法,仅适用于纯AspectJ,而不适用于基于代理的Spring AOP。但纯粹的AspectJ(由AspectJ编译器编译)也可以合并到Spring项目中,如Spring手册第Using AspectJ with Spring applications章所述。
至于哪种方法更适合实现安全性,只要您没有详细描述您的用例,这就是一个哲学问题,但我的一般建议是:如果您仍然使用Spring框架,也可以使用其安全机制。如果您只考虑使用Spring,因为您想使用Spring AOP,我建议您远离仅用于单一用途的大型框架,并在POJO应用程序中使用纯AspectJ来实现安全性。