W aspekcie mogą być zadeklarowane, poza typowymi elementami klasy, jak pola i metody, elementy definiujące punkty cięć (czyli punkty, w których kod programu przecina się z aspektem), oraz rady, będące substytutem metod i fragmentami kodu, który ma być wykonywany w odpowiednim punkcie cięcia.

Źródła aspektów zapisywane są w plikach o rozszerzeniu ".aj". Po skompilowaniu natomiast przyjmują postać kodu bajtowego i zapisane są w standardowych plikach binarnych z rozszerzeniem ".class". Z perspektywy maszyny wirtualnej Javy są one traktowane jako zwyczajne klasy.

Poniższy przykład ilustruje konstrukcję prostego aspektu logowania błędów z metod publicznych: public aspect PublicErrorLogging {

private Log log = new Log();

pointcut publicMethodCall(): call(public * com.sarxos.*.*(..));

after() throwing (Exception e): publicMethodCall() { log.write(e);

thumb|250 px|Proces wplatania logiki aspektowej w kod obiektowy. thumb|250 px|Źródło aspektu jest kompilowane do pliku class.