AspectJ jest aspektowym rozszerzeniem dla języka Java realizującym paradygmat programowania aspektowego. Został stworzony w laboratoriach Xerox PARC w zespole kierowanym przez dr. Gregora Kiczalesa, prowadzącego badania nad technikami modularyzacji kodu. Pierwsza publiczna wersja powstała w 2001 roku - datę tę oficjalnie uznaje się za początek jego istnienia.
Podstawowe założenia W języku Java, oraz w innych obiektowych językach programowania podstawową jednostką modularności jest klasa. AspectJ wprowadza dodatkową jednostkę jaką jest aspekt. Aspekt opisuje zagadnienie, którego implementacja przecina więcej niż jedną klasę. Kod Java napisany przy użyciu AspectJ składa się z klas reprezentujących tradycyjną strukturę modularną oraz z aspektów, które ją przecinają. Najważniejszą ideą AspectJ (jak i również samego paradygmatu programowania aspektowego) jest wspomaganie separacji zagadnień i rozdzielenie programu na części w jak największym stopniu niezwiązane funkcjonalnie.
Przecinanie standardowej struktury modularnej klas w AspectJ dzieli się na: statyczne (modyfikujące strukturę klas, hierarchię dziedziczenia), dynamicznie (zmieniające zachowanie programu).