Introduction

Many software developers are attracted to the idea of aspect-oriented
programming (AOP) but unsure about how to begin using the
technology. They recognize the concept of crosscutting concerns, and
know that they have had problems with the implementation of such
concerns in the past. But there are many questions about how to adopt
AOP into the development process. Common questions include:

Can I use aspects in my existing code?

What kinds of benefits can I expect to get from using aspects?

How do I find aspects in my programs?

How steep is the learning curve for AOP?

What are the risks of using this new technology?

This chapter addresses these questions in the context of AspectJ: a
general-purpose aspect-oriented extension to Java. A series of
abridged examples illustrate the kinds of aspects programmers may
want to implement using AspectJ and the benefits associated with
doing so. Readers who would like to understand the examples in more
detail, or who want to learn how to program examples like these, can
find more complete examples and supporting material linked from the
AspectJ web site ( http://eclipse.org/aspectj ).

A significant risk in adopting any new technology is going too far
too fast. Concern about this risk causes many organizations to be
conservative about adopting new technology. To address this issue,
the examples in this chapter are grouped into three broad categories,
with aspects that are easier to adopt into existing development
projects coming earlier in this chapter. The next section, Introduction to AspectJ, we present the core of AspectJ's
features, and in Development Aspects, we present
aspects that facilitate tasks such as debugging, testing and
performance tuning of applications. And, in the section following,
Production Aspects, we present aspects that
implement crosscutting functionality common in Java applications. We
will defer discussing a third category of aspects, reusable aspects,
until The AspectJ Language.

These categories are informal, and this ordering is not the only way
to adopt AspectJ. Some developers may want to use a production aspect
right away. But our experience with current AspectJ users suggests
that this is one ordering that allows developers to get experience
with (and benefit from) AOP technology quickly, while also minimizing
risk.