738:, so developers could write aspects for code in binary (.class) form. At this time the AspectJ language was restricted to support a per-class model essential for incremental compilation and load-time weaving. This made IDE integrations as responsive as their Java counterparts, and it let developers deploy aspects without altering the build process. This led to increased adoption, as AspectJ became usable for impatient Java programmers and enterprise-level deployments. Since then, the Eclipse team has increased performance and correctness, upgraded the AspectJ language to support
168:
308:
66:
1304:
25:
730:. In all cases, the AspectJ program becomes a valid Java program that runs in a Java VM. Classes affected by aspects are binary-compatible with unaffected classes (to remain compatible with classes compiled with the unaffected originals). Supporting multiple implementations allows the language to grow as technology changes, and being Java-compatible ensures platform availability.
869:. After Adrian Colyer, Andrew Clement took over as project lead and main contributor for AspectJ. AJDT has since been retired as a separate project and taken over into the Eclipse AspectJ umbrella project to streamline maintenance. However, both AspectJ and AJDT are still maintained in separate source repositories.
733:
Key to its success has been engineering and language decisions that make the language usable and programs deployable. The original Xerox AspectJ implementation used source weaving, which required access to source code. When Xerox contributed the code to
Eclipse, AspectJ was reimplemented using the
784:
BEA has offered limited VM support for aspect-oriented extensions, but for extensions supported in all Java VM's would require agreement through Sun's Java
Community Process (see also the java.lang.instrument package available since Java SE 5 — which is a common ground for JVM load-time
876:
joined the project, first as a contributor, then as a committer and maintainer. Since March 2021, he is basically the sole maintainer. Since 2024, he also is formally the AspectJ and AJDT project lead.
800:; it supports extensions for changing the syntax and semantics of the language and forms the basis for many AOP experiments that the AspectJ team can no longer support, given its broad user base.
781:
foundered when Xerox put them into open source, but support for Oracle's JDeveloper did appear. IDE support has been key to Java programmers using AspectJ and understanding crosscutting concerns.
438:. AspectJ has become a widely used de facto standard for AOP by emphasizing simplicity and usability for end users. It uses Java-like syntax, and included IDE integrations for displaying
403:
1240:
956:
AspectWerkz provides an API to use the very same aspects for proxies, hence providing a transparent experience, allowing a smooth transition for users familiar with proxies.
885:
930:
engineered the AspectWerkz project, and later contributed to the AspectJ project when it merged in the AspectWerkz annotation style and load-time weaving support.
893:
881:
873:
560:
1233:
723:
901:
933:
Unlike AspectJ prior to version 5, AspectWerkz did not add any new language constructs to Java, but instead supported declaration of aspects within
866:
719:
563:) that determine whether a given join point matches. For example, this point-cut matches the execution of any instance method in an object of type
862:
846:
559:(well-defined moments in the execution of a program, like method call, object instantiation, or variable access). All pointcuts are expressions (
1561:
927:
197:
1521:
1226:
923:
1361:
1556:
804:
1576:
1546:
452:
889:
1033:
1571:
1153:
1123:
1099:
1075:
1516:
991:
465:
Allow a programmer to add methods, fields, or interfaces to existing classes from within the aspect. This example adds an
396:
942:
450:
All valid Java programs are also valid AspectJ programs, but AspectJ lets programmers define special constructs called
130:
964:
237:
219:
149:
52:
190:
102:
1526:
1354:
706:
AspectJ also supports limited forms of pointcut-based static checking and aspect reuse (by inheritance). See the
1551:
1511:
109:
87:
1185:
1268:
1180:
1175:
1169:
792:
languages has surrounded AspectJ since its release. The leading research implementation of AspectJ is the
1541:
1531:
1456:
1426:
1347:
1273:
1249:
1115:
976:
920:. It has been merged with the AspectJ project, which supports AspectWerkz functionality since AspectJ 5.
917:
913:
789:
423:
419:
334:
299:
261:
116:
761:
interfaces. A related
Eclipse project has steadily improved the Eclipse IDE support for AspectJ (called
1536:
949:. Aspects can be defined using either Java annotations (introduced with Java 5), Java 1.3/1.4 custom
180:
1011:
98:
1200:
1111:
Eclipse AspectJ: Aspect-Oriented
Programming with AspectJ and the Eclipse AspectJ Development Tools
707:
184:
176:
83:
38:
307:
1466:
985:
76:
1566:
1492:
358:
201:
1195:
1145:
1134:
967:-style license allows the use of AspectWerkz 2.0 in both commercial and open source projects.
1283:
1109:
803:
Many programmers discover AspectJ as an enabling technology for other projects, most notably
439:
1263:
1190:
1141:
1067:
632:
256:
8:
1406:
435:
1436:
1411:
1370:
431:
407:
365:
273:
268:
1149:
1119:
1108:
Colyer, Adrian; Clement, Andy; Harley, George; Webster, Matthew (December 24, 2004),
1095:
1091:
1071:
897:
123:
1004:
1476:
1041:
743:
460:
456:. Aspects can contain several entities unavailable to standard classes. These are:
353:
341:
934:
823:
747:
727:
470:
1461:
1416:
427:
346:
1218:
1207:
1505:
1278:
960:
938:
1212:
1085:
1396:
44:
1176:
https://web.archive.org/web/20170816093700/http://www.sable.mcgill.ca/abc/
1421:
1401:
1318:
854:
853:
team members 12 and 13) were the original compiler and weaver engineers,
842:
835:
751:
1431:
1288:
981:
850:
827:
808:
758:
654:
637:
Allow a programmer to specify code to run at a join point matched by a
556:
1339:
65:
1386:
1293:
778:
774:
638:
550:
793:
379:
1381:
769:) and other providers of crosscutting structure. IDE support for
657:. Here, the advice refreshes the display every time something on
1471:
1451:
1303:
950:
812:
739:
1481:
1446:
1441:
1211:
for AOP/AspectJ, but published AspectJ source code under the
770:
912:
AspectWerkz was a dynamic, lightweight and high-performance
713:
941:
classes at project build-time, class load time, as well as
830:
team that eventually developed AspectJ. He coined the term
764:
735:
434:
open-source projects, both stand-alone and integrated into
1107:
858:
1132:
Gradecki, Joseph D.; Lesiecki, Nicholas (March 7, 2003),
884:
was developed and is maintained as a joint effort of the
788:
Academic interest in the semantics and implementation of
750:, and integrated annotation-style pure-java aspects from
1136:
734:
Eclipse Java compiler and a bytecode weaver based on
1191:
Improve modularity with aspect-oriented programming
757:The Eclipse project supports both command-line and
718:AspectJ can be implemented in many ways, including
90:. Unsourced material may be challenged and removed.
1133:
710:for a more detailed description of the language.
1503:
1131:
857:implemented the IDE integration and started the
189:but its sources remain unclear because it lacks
1248:
445:
1355:
1234:
1064:AspectJ in Action: Enterprise AOP with Spring
818:
53:Learn how and when to remove these messages
1362:
1348:
1241:
1227:
902:Basic Research in Computer Science (BRICS)
661:is set, using the pointcut declared above:
442:since its initial public release in 2001.
306:
16:Aspect-oriented Java programming extension
815:as its principal code generation output.
714:AspectJ compatibility and implementations
238:Learn how and when to remove this message
220:Learn how and when to remove this message
150:Learn how and when to remove this message
1034:"AspectJ and AspectWerkz to Join Forces"
1062:Laddad, Ramnivas (September 28, 2009),
937:. It utilizes bytecode modification to
1504:
1369:
1061:
890:Oxford University Computing Laboratory
1562:Programming languages created in 2001
1343:
1222:
1083:
1522:Aspect-oriented software development
992:Aspect-oriented software development
161:
88:adding citations to reliable sources
59:
18:
1196:Spring AOP and AspectJ Introduction
13:
1557:Software using the Eclipse license
1215:, which grants some patent rights.
811:, automatically maintains AspectJ
14:
1588:
1163:
1084:Miles, Russ (December 20, 2004),
953:or a simple XML definition file.
426:programming language, created at
34:This article has multiple issues.
1577:High-level programming languages
1547:Java programming language family
1328:
1302:
166:
64:
23:
641:. The actions can be performed
75:needs additional citations for
42:or discuss these issues on the
1026:
907:
555:Allow a programmer to specify
1:
1201:The AspectJ Programming Guide
997:
404:The AspectJ Development Tools
1572:Cross-platform free software
1186:AspectWerkz Project homepage
1040:. 2006-07-12. Archived from
840:aspect-oriented programming.
7:
1517:Aspect-oriented programming
1457:Remote Application Platform
1274:Aspect-oriented programming
1250:Aspect-oriented programming
1116:Addison-Wesley Professional
977:Aspect-oriented programming
970:
807:. A sister Spring project,
763:AspectJ Development Tools (
446:Simple language description
420:aspect-oriented programming
10:
1593:
1490:
1377:
1311:
1300:
1256:
708:AspectJ Programming Guide
402:
394:
374:
364:
352:
340:
330:
326:
298:
294:
279:
267:
255:
900:, and the Institute for
819:History and contributors
666:
576:
482:
422:(AOP) extension for the
175:This article includes a
1527:Cross-platform software
1467:Standard Widget Toolkit
945:. It uses standardized
886:Programming Tools Group
813:inter-type declarations
742:language features like
567:whose name begins with
331:Implementation language
204:more precise citations.
1493:Eclipse Public License
1284:Cross-cutting concerns
834:. Fourth on the team,
726:, and directly in the
440:crosscutting structure
359:Eclipse Public License
313:; 4 months ago
1552:Software distribution
1512:Programming languages
1213:Common Public License
1208:U.S. patent 6,467,086
430:. It is available in
1174:Aspect bench :
1068:Manning Publications
894:Sable Research Group
882:AspectBench Compiler
826:started and led the
794:AspectBench Compiler
728:virtual machine (VM)
84:improve this article
874:Alexander Kriegisch
366:Filename extensions
280:First appeared
252:
1542:Eclipse technology
1532:Eclipse (software)
1371:Eclipse Foundation
1012:"Release 1.9.22.1"
785:instrumentation).
432:Eclipse Foundation
274:Eclipse Foundation
250:
177:list of references
1499:
1498:
1337:
1336:
1181:AspectJ Home Page
1155:978-0-471-43104-6
1125:978-0-321-24587-8
1101:978-0-596-00654-9
1077:978-1-933988-05-4
898:McGill University
461:Extension methods
413:
412:
248:
247:
240:
230:
229:
222:
160:
159:
152:
134:
57:
1584:
1537:Eclipse software
1364:
1357:
1350:
1341:
1340:
1306:
1243:
1236:
1229:
1220:
1219:
1210:
1158:
1140:(1st ed.),
1139:
1128:
1114:(1st ed.),
1104:
1090:(1st ed.),
1087:AspectJ Cookbook
1080:
1066:(2nd ed.),
1053:
1052:
1050:
1049:
1044:on July 12, 2006
1030:
1024:
1023:
1021:
1019:
1008:
986:Spring Framework
948:
935:Java annotations
838:coined the term
724:bytecode-weaving
700:
697:
694:
691:
688:
685:
682:
679:
676:
673:
670:
660:
625:
622:
619:
616:
613:
610:
607:
604:
601:
598:
595:
592:
589:
586:
583:
580:
570:
566:
543:
540:
537:
534:
531:
528:
525:
522:
519:
516:
513:
510:
507:
504:
501:
498:
495:
492:
489:
486:
476:
473:) method to the
468:
390:
387:
385:
383:
381:
321:
319:
314:
310:
290:
288:
253:
249:
243:
236:
225:
218:
214:
211:
205:
200:this article by
191:inline citations
170:
169:
162:
155:
148:
144:
141:
135:
133:
92:
68:
60:
49:
27:
26:
19:
1592:
1591:
1587:
1586:
1585:
1583:
1582:
1581:
1502:
1501:
1500:
1495:
1486:
1373:
1368:
1338:
1333:
1307:
1298:
1252:
1247:
1206:
1166:
1161:
1156:
1126:
1118:, p. 504,
1102:
1094:, p. 354,
1078:
1070:, p. 550,
1057:
1056:
1047:
1045:
1032:
1031:
1027:
1017:
1015:
1010:
1009:
1005:
1000:
973:
959:AspectWerkz is
946:
910:
824:Gregor Kiczales
821:
790:aspect-oriented
716:
702:
701:
698:
695:
692:
689:
686:
683:
680:
677:
674:
671:
668:
658:
627:
626:
623:
620:
617:
614:
611:
608:
605:
602:
599:
596:
593:
590:
587:
584:
581:
578:
568:
564:
561:quantifications
545:
544:
541:
538:
535:
532:
529:
526:
523:
520:
517:
514:
511:
508:
505:
502:
499:
496:
493:
490:
487:
484:
474:
471:visitor pattern
466:
448:
397:implementations
378:
322:
317:
315:
312:
286:
284:
262:aspect-oriented
244:
233:
232:
231:
226:
215:
209:
206:
195:
181:related reading
171:
167:
156:
145:
139:
136:
93:
91:
81:
69:
28:
24:
17:
12:
11:
5:
1590:
1580:
1579:
1574:
1569:
1564:
1559:
1554:
1549:
1544:
1539:
1534:
1529:
1524:
1519:
1514:
1497:
1496:
1491:
1488:
1487:
1485:
1484:
1479:
1474:
1469:
1464:
1459:
1454:
1449:
1444:
1439:
1434:
1429:
1424:
1419:
1414:
1409:
1404:
1399:
1394:
1389:
1384:
1378:
1375:
1374:
1367:
1366:
1359:
1352:
1344:
1335:
1334:
1332:
1331:
1326:
1321:
1315:
1313:
1309:
1308:
1301:
1299:
1297:
1296:
1291:
1286:
1281:
1276:
1271:
1266:
1260:
1258:
1254:
1253:
1246:
1245:
1238:
1231:
1223:
1217:
1216:
1203:
1198:
1193:
1188:
1183:
1178:
1172:
1165:
1164:External links
1162:
1160:
1159:
1154:
1129:
1124:
1105:
1100:
1092:O'Reilly Media
1081:
1076:
1058:
1055:
1054:
1025:
1002:
1001:
999:
996:
995:
994:
989:
979:
972:
969:
947:JVM level APIs
916:framework for
909:
906:
867:Andrew Clement
820:
817:
720:source-weaving
715:
712:
704:
703:
667:
663:
662:
653:the specified
635:
629:
628:
577:
573:
572:
553:
547:
546:
483:
479:
478:
463:
447:
444:
411:
410:
400:
399:
392:
391:
376:
372:
371:
368:
362:
361:
356:
350:
349:
347:Cross-platform
344:
338:
337:
332:
328:
327:
324:
323:
305:1.9.22.1
304:
302:
300:Stable release
296:
295:
292:
291:
281:
277:
276:
271:
265:
264:
259:
246:
245:
228:
227:
185:external links
174:
172:
165:
158:
157:
72:
70:
63:
58:
32:
31:
29:
22:
15:
9:
6:
4:
3:
2:
1589:
1578:
1575:
1573:
1570:
1568:
1567:2001 software
1565:
1563:
1560:
1558:
1555:
1553:
1550:
1548:
1545:
1543:
1540:
1538:
1535:
1533:
1530:
1528:
1525:
1523:
1520:
1518:
1515:
1513:
1510:
1509:
1507:
1494:
1489:
1483:
1480:
1478:
1475:
1473:
1470:
1468:
1465:
1463:
1460:
1458:
1455:
1453:
1450:
1448:
1445:
1443:
1440:
1438:
1435:
1433:
1430:
1428:
1425:
1423:
1420:
1418:
1415:
1413:
1410:
1408:
1405:
1403:
1400:
1398:
1395:
1393:
1390:
1388:
1385:
1383:
1380:
1379:
1376:
1372:
1365:
1360:
1358:
1353:
1351:
1346:
1345:
1342:
1330:
1327:
1325:
1322:
1320:
1317:
1316:
1314:
1310:
1305:
1295:
1292:
1290:
1287:
1285:
1282:
1280:
1279:Aspect weaver
1277:
1275:
1272:
1270:
1267:
1265:
1262:
1261:
1259:
1255:
1251:
1244:
1239:
1237:
1232:
1230:
1225:
1224:
1221:
1214:
1209:
1204:
1202:
1199:
1197:
1194:
1192:
1189:
1187:
1184:
1182:
1179:
1177:
1173:
1171:
1168:
1167:
1157:
1151:
1147:
1143:
1138:
1137:
1130:
1127:
1121:
1117:
1113:
1112:
1106:
1103:
1097:
1093:
1089:
1088:
1082:
1079:
1073:
1069:
1065:
1060:
1059:
1043:
1039:
1035:
1029:
1014:. 11 May 2024
1013:
1007:
1003:
993:
990:
987:
984:(part of the
983:
980:
978:
975:
974:
968:
966:
962:
961:free software
957:
954:
952:
944:
940:
936:
931:
929:
925:
921:
919:
915:
905:
903:
899:
895:
891:
887:
883:
878:
875:
870:
868:
864:
863:Adrian Colyer
861:project with
860:
856:
852:
848:
847:Erik Hilsdale
844:
841:
837:
833:
829:
825:
816:
814:
810:
806:
801:
799:
795:
791:
786:
782:
780:
776:
772:
768:
766:
760:
755:
753:
749:
745:
741:
737:
731:
729:
725:
721:
711:
709:
665:
664:
656:
652:
648:
644:
640:
636:
634:
631:
630:
575:
574:
562:
558:
554:
552:
549:
548:
503:acceptVisitor
481:
480:
472:
467:acceptVisitor
464:
462:
459:
458:
457:
455:
454:
443:
441:
437:
433:
429:
425:
421:
417:
409:
405:
401:
398:
393:
389:
377:
373:
369:
367:
363:
360:
357:
355:
351:
348:
345:
343:
339:
336:
333:
329:
325:
311:/ 11 May 2024
309:
303:
301:
297:
293:
282:
278:
275:
272:
270:
266:
263:
260:
258:
254:
242:
239:
224:
221:
213:
203:
199:
193:
192:
186:
182:
178:
173:
164:
163:
154:
151:
143:
132:
129:
125:
122:
118:
115:
111:
108:
104:
101: –
100:
96:
95:Find sources:
89:
85:
79:
78:
73:This article
71:
67:
62:
61:
56:
54:
47:
46:
41:
40:
35:
30:
21:
20:
1391:
1323:
1135:
1110:
1086:
1063:
1046:. Retrieved
1042:the original
1037:
1028:
1016:. Retrieved
1006:
958:
955:
932:
928:Alex Vasseur
922:
911:
879:
871:
859:Eclipse AJDT
839:
832:crosscutting
831:
822:
802:
797:
787:
783:
762:
756:
732:
717:
705:
650:
646:
642:
451:
449:
415:
414:
234:
216:
207:
196:Please help
188:
146:
137:
127:
120:
113:
106:
94:
82:Please help
77:verification
74:
50:
43:
37:
36:Please help
33:
1422:EclipseLink
1407:Buckminster
1329:AspectWerkz
1144:, pp.
1038:Aspectwerkz
924:Jonas Boner
908:AspectWerkz
855:Mik Kersten
843:Jim Hugunin
836:Chris Maeda
752:AspectWerkz
748:annotations
557:join points
488:VisitAspect
318:11 May 2024
202:introducing
1506:Categories
1432:Jakarta EE
1289:Join point
1205:Xerox has
1048:2024-03-19
998:References
982:Spring AOP
851:Xerox PARC
828:Xerox PARC
809:Spring Roo
805:Spring AOP
655:join point
612:&&
210:March 2024
140:March 2024
110:newspapers
39:improve it
1319:AspectC++
1312:Languages
872:In 2021,
591:execution
551:Pointcuts
269:Developer
99:"AspectJ"
45:talk page
1387:Adoptium
1294:Pointcut
1257:Concepts
971:See also
914:AOP/AOSD
779:JBuilder
775:NetBeans
744:generics
639:pointcut
579:pointcut
386:/aspectj
382:.eclipse
257:Paradigm
1417:Equinox
1412:Eclipse
1392:AspectJ
1382:Acceleo
1324:AspectJ
943:runtime
888:at the
687:Display
633:Advices
509:Visitor
453:aspects
436:Eclipse
416:AspectJ
408:Eclipse
375:Website
354:License
316: (
285: (
251:AspectJ
198:improve
124:scholar
1472:Vert.x
1462:Sirius
1452:OpenJ9
1437:Jetty
1269:Aspect
1264:Advice
1152:
1122:
1098:
1074:
1018:20 May
963:. The
951:doclet
892:, the
777:, and
740:Java 5
693:update
651:around
643:before
485:aspect
477:class:
418:is an
395:Major
126:
119:
112:
105:
97:
1482:Xtext
1477:Virgo
1447:Mylyn
1442:JFace
1142:Wiley
939:weave
796:, or
771:emacs
669:after
659:Point
649:, or
647:after
621:Point
565:Point
527:visit
497:Point
475:Point
469:(see
183:, or
131:JSTOR
117:books
1427:Golo
1397:BIRT
1170:AJDT
1150:ISBN
1120:ISBN
1096:ISBN
1072:ISBN
1020:2024
965:LGPL
926:and
918:Java
880:The
865:and
845:and
765:AJDT
746:and
736:BCEL
615:this
606:(..)
533:this
494:void
428:PARC
424:Java
406:for
384:.org
335:Java
287:2001
283:2001
103:news
1402:Che
1146:456
896:at
798:abc
759:Ant
722:or
696:();
678:set
600:set
582:set
569:set
380:www
86:by
1508::
1148:,
1036:.
904:.
773:,
754:.
681:()
672:()
645:,
624:);
585:()
536:);
370:aj
342:OS
187:,
179:,
48:.
1363:e
1356:t
1349:v
1242:e
1235:t
1228:v
1051:.
1022:.
988:)
849:(
767:)
699:}
690:.
684:{
675::
618:(
609:)
603:*
597:*
594:(
588::
571::
542:}
539:}
530:(
524:.
521:v
518:{
515:)
512:v
506:(
500:.
491:{
388:/
320:)
289:)
241:)
235:(
223:)
217:(
212:)
208:(
194:.
153:)
147:(
142:)
138:(
128:·
121:·
114:·
107:·
80:.
55:)
51:(
Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.