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.