In Spring AOP, the runtime weaving of Aspects will be performed by the container at startup and hence it integrates seamlessly with our building process.
On the other hand, in AspectJ, we have to perform this using an extra compiler (ajc) unless we are doing this post-compilation or in LTW. For this reason, Spring is simpler and more manageable than AspectJ.
With Spring AOP, we cannot use or apply the full power of AOP because Spring AOP is proxy-based and can only be applied to Spring-managed beans.
AspectJ is based on byte-code weaving, meaning it modifies our code and hence it enables us to use the full power of AOP on any bean of our application.