Chapter 1. Getting Started with AspectJ

Table of Contents

Introduction
AspectJ Semantics
The Dynamic Join Point Model
Pointcut Designators
Advice
Introduction
Aspect Declarations
Development Aspects
Tracing, Logging, and Profiling
Pre- and Post-Conditions
Contract Enforcement
Configuration Management
Production Aspects
Change Monitoring
Context Passing
Providing Consistent Behavior
Static Crosscutting: Introduction
Conclusion

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 the complete examples and supporting material on the AspectJ web site(http://aspectj.org/documentation/papersAndSlides/figures-cacm2001.zip).

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, AspectJ Semantics, we present the core of AspectJ's semantics, 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.