Knowledge

AspectJ

Source 📝

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:
Mastering AspectJ: Aspect-Oriented Programming in Java
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:(

Index

improve it
talk page
Learn how and when to remove these messages

verification
improve this article
adding citations to reliable sources
"AspectJ"
news
newspapers
books
scholar
JSTOR
Learn how and when to remove this message
list of references
related reading
external links
inline citations
improve
introducing
Learn how and when to remove this message
Learn how and when to remove this message
Paradigm
aspect-oriented
Developer
Eclipse Foundation
Stable release
Edit this on Wikidata
Java
OS

Text is available under the Creative Commons Attribution-ShareAlike License. Additional terms may apply.