Both require programmers to write the same functionality into many different areas of the application. Even a modestsized application can easily present 100 crosscutting issues. Programmers try to track these instances of repetition, so that when a capability needs to be changed or upgraded, it can be done uniformly throughout the program. But keeping track of crosscutting concerns is an error-prone process. Forget to upgrade just a few of these instances, and your code starts collecting bugs.
Aspects allow programmers to write, view and edit a crosscutting concern as a separate entity.
Once the programmer is happy with it, a single keystroke will weave the aspect into the code wherever it is needed. It's a smart, intuitive, neat solution to an old problem. The idea of aspects has been around for many years and with many different names. But unlike these other research projects, Kiczales and his team at PARC have taken the concept out of the lab and into the real world by incorporating the idea of aspects into a new extension of the programming language lava. Some have already found AspectJ so solid that they've used it in production.