# 5.1Spring AOP的能力和目标

Spring AOP是纯Java实现的。不需要特殊的编译过程。SpringAOP不需要控制类加载器层次结构，因此适合在servlet容器或应用程序服务器中使用。

SpringAOP目前只支持方法执行连接点（建议在SpringBean上执行方法）。虽然可以在不破坏核心SpringAOP APIs的情况下添加对字段拦截的支持，但没有实现字段拦截。如果需要通知字段访问和更新连接点，请考虑使用AspectJ之类的语言。

SpringAOP的AOP方法不同于大多数其他AOP框架。目的并不是提供最完整的AOP实现（尽管SpringAOP非常有能力）。相反，其目的是在AOP实现和SpringIOC之间提供紧密的集成，以帮助解决企业应用程序中的常见问题。

因此，例如，Spring框架的AOP功能通常与SpringIOC容器一起使用。Aspects是通过使用普通bean定义语法配置的（尽管这允许强大的“自动代理”功能）。这是与其他AOP实现的关键区别。对于SpringAOP，你不能轻松或高效地执行某些操作，例如通知非常细粒度的对象（通常是域对象）。在这种情况下，AspectJ是最佳选择。然而，我们的经验是，Spring AOP为企业Java应用程序中大多数面向AOP的问题提供了极好的解决方案。

SpringAOP从未试图与AspectJ竞争，以提供全面的AOP解决方案。我们相信，基于代理的框架（如SpringAOP）和全面的框架（如AspectJ）都是有价值的，它们是互补的，而不是竞争中的。Spring无缝地将SpringAOP和IOC与AspectJ集成在一起，以在一致的基于Spring的应用程序体系结构中实现AOP的所有使用。此集成不会影响Spring AOP API或AOP Alliance API。 SpringAOP保持向后兼容。有关SpringAOPAPIs的讨论，请参阅下一章。

> Spring框架的核心原则之一是无侵略性。这是一种观点，即不应强制你将特定于框架的类和接口引入到你的业务或域模型中。但是，在某些地方，Spring框架确实为你提供了将特定于Spring框架的依赖性引入到代码库中的选项。为你提供这些选项的基本原理是，在某些场景中，以这种方式读取或编码某些特定功能可能非常简单。然而，Spring框架（几乎）总是为你提供了选择：你可以自由地做出一个明智的决定，决定哪个选项最适合你的特定用例或场景。
>
> 与本章相关的一个选择是选择哪个AOP框架（以及哪个AOP样式）。你可以选择AspectJ、Spring AOP或两者。你还可以选择@Aspectj注解样式方法或SpringXML配置样式方法。本章选择首先介绍@Aspectj样式方法的事实不应被视为表明Spring团队倾向于使用@Aspectj注解样式方法而不是SpringXML配置样式。
>
> 请参阅选择要使用的AOP声明样式，以更完整地讨论每种样式的“原因和理由”。


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.flydean.com/spring-framework-documentation5/core-technologies/5spring-aop/5.2spring-aop-capabilities-and-goals.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
