**AspectJ** یک تعمیم برنامه‌نویسی جنبه‌گرا است که برای زبان برنامه‌نویسی جاوا در شرکت PARC ایجاد شده‌است. این افزونه در بنیاد پروژه‌های متن باز Eclipse Foundation در دسترس است. اما هر دو مستقل و یکپارچه شده‌اند. AspectJ به‌طور گسترده‌ای برای برنامه‌نویسی جنبه‌گرا استاندارد شده‌است و همزمان بر سادگی و قابلیت استفاده برای کاربران نهایی تأکید دارد. این زبان از نحو سبه جاوا استفاده می‌کند و شامل یک محیط یکپارچه توسعه نرم‌افزار برای نمایش ساختار Cross-cutting است. انتشار اولیهٔ آن در سال ۲۰۰۱ بوده‌است.

توضیح سادهٔ زبان
----------------

همه برنامه‌های معتبر جاوا (زبان برنامه‌نویسی) همچنین برنامه‌های AspectJ معتبر هستند. اما AspectJ به برنامه نویسان اجازه می‌دهد تا تعریف خاص یک ساختار به نام جنبه *را ایجاد کنند.*. aspects می‌تواند شامل چندین موجودیت غیرقابل دسترس به استاندارد کلاس باشد. اینها هستند:

روش‌های توسعه
به یک برنامه‌نویس اجازه می‌دهد تا روش، زمینه، یا رابط به کلاس‌های موجود از درون جنبه را اضافه کند به عنوان مثال یک `acceptVisitor` (نگاه کنید به الگوی بازدید کننده) روش به کلاس `نقطه` :

```
aspect VisitAspect {
  void Point.acceptVisitor(Visitor v) {
    v.visit(this);
  }
}

```

نقاط برش
به برنامه‌نویس اجازه می‌دهد برای مشخص کردن نقاط اتصال (حالت‌های به خوبی تعریف شده در اجرای یک برنامه مانند روش تماس شی نمونه یا متغیر دسترسی). همه pointcuts عباراتی (quantifications) هستند که تعیین می‌کنند که آیا یک نقطه اتصال منطبق م ناسب است یا خیر. برای مثال این نقطه برش منطبق اجرای هر روش نمونه در یک شی از نوع `Point` که با `set`آغاز می‌شود:

```
pointcut set() : execution(\* set\*(..) ) && this(Point);

```

توصیه‌ها و کمک‌ها
AspectJ به برنامه‌نویس اجازه می‌دهد برای اتصال به نقطه همسان با pointcutکد اجرا را تعیین کند. این اقدامات انجام می‌شود *قبل* *بعد*و یا *در حین*  مشخص شدن نقطهٔ اتصال انجام می‌شود. در اینجا advice برای هر چیزی که در `point` تنظیم شده است عمل تازه سازی نمایش را انجام می‌دهد. با استفاده از pointcut که در بالا توضیخ داده شد:

```
after () : set() {
  Display.update();
}

```

برای توضیحات بیشتر AspectJ راهنمای برنامه‌نویسی را ببینید.

سازگاری و پیاده‌سازی AspectJ
----------------------------

AspectJ می‌تواند در بسیاری از روش هااجرا شود از جمله منبع بافی یا bytecode بافیو همچنین به‌طور مستقیم در ماشین مجازی (VM). در تمام موارد AspectJ به عموان یگ برنامه معتبر در ماشین مجازی جاوا
اجرا می‌شود. کلاس‌های متأثر از جنبه‌های دودویی-سازگار با تأثیرپذیری از کلاس (برای باقی ماندن سازگاری با کلاس‌های وارد شده با تأثیرپذیری اصلی). حمایت از پیاده‌سازی‌های متعدد اجازه می‌دهد تا زبان به رشد تغییرات تکنولوژی و پلت فرم در دسترس سازگار با جاوا را تضمین می‌کند.

کلید موفقیت آن، مهندسی و زبان تصمیم‌گیری است که آن را تبدیل به یک زبان قابل استفاده و برنامه‌های گسترش پذیر می‌کند.. AspectJ اصلی شرکت زیراکس برای اجرای منبع بافی مورد استفاده که نیاز به دسترسی کد منبعرا داراست. زمانی که زیراکس کد منبع را با اکلیپس به اشتراک گذاشت.AspectJ با استفاده از Eclipse Java compiler و یک bytecode ویور بر اساس BCELدوباره پیاده‌سازی شده بود؛ بنابراین توسعه دهندگان می‌تواند نوشتن جنبه به صورت کد باینری (کلاس) را انجام دهند. در این زمان زبان برنامه‌نویسی AspectJ به حمایت چند کلاس مدل ضروری محدود شده بود. این محیط یکپارچه توسعه نرم‌افزار باعث افزایش جذابیت نسبت دیگر همتایانه جاوایی خود شد؛ و آن توسعه دهندگان اجازه استقرار جنبه‌های بدون تغییر ساخت روند می‌داد. این منجر به افزایش پذیرش AspectJ به عنوان یک زبان قابل استفاده برای برنامه نویسان جاوا و حتی در سطح سازمانی شد. پس از آن تیم اکلیپس عملکردو صحت آن را افزایش داد. به روز رسانی زبان AspectJ برای پشتیبانی از ویژگی‌های زبان Java 5 مانند generics و حاشیه نویسیو حاشیه‌نویسی یکپارچه-سبک خالص-جاوا.

پروژه اکلیپس هم از خط فرمان و هم مورچه رابط پشتیبانی می‌کند.. یک پروژه مرتبط با پروژه اکلیپس به‌طور پیوسته Eclipse IDE پشتیبانی (AJDT) را برای AspectJ بهبود می‌دهد. IDE از ایمکس، NetBeansو JBuilder را زمانی که زیراکس آن را در در کد کتن باز قرار داده است پشتیبانی می‌کند اما پشتیبانی اوراکل از JDeveloper ظاهر می‌شود. IDE وسیله‌ای شده‌است برای برنامه نویسانی جاوا یی که ازبان AspectJ استفاده می‌کنند برای درک و ربط به crosscutting.

BEA یک VM محدود شده برای حمایتافزونه س جنبه گرای پیشنهاد داد ولی برایافزونه ئهای پشتیبانی شده در تمام Java VMها نیازمند تأیید Java Community Process است.

علاقهٔ علمی در معانی و اجرای زبان‌های جنبه گرادر احاطهٔ AspectJ پس از انتشار آن است. تحقیقات آینده در رابطه با کاپایلر aspect bench یا *abc*است؛ که از افزونهٔ تغییر متن کد یامعانی زبان برنامه‌نویسی و فرم‌های پایه‌ای بسیاری از آزمایش‌های AOP که تیم Aspectj از ان پشتیبانی کمی کرد، پشتیبانی می‌کند؛ که به آن یک پایه گسترده کاربری می‌کند.

بسیاری از برنامه نویسان پی برده‌اند که زبان برنامه‌نویسی AspectJ به عنوان یک فناوریدر دسترس برای دیگر پروژه‌ها به ویژه اسپرینگ فریمورک
می‌تواند باشد. خواهر خواندهٔ پروژه اسپرینگ Spring Roo به‌طور خودکار توضیح نوع ورودی AspectJ را به عنوان کد خروجی تولیدی اصلی ادامه می‌دهد.

تاریخچه و همکاران
-----------------

توسط Gregor Kiczales آغاز شده و توسط تیم شرکت Xerox PARC هدایت شده که در نهایت باعث توسعه AspectJ شد. او واژه *crosscutting را بداع کرد*. Chris Maeda واژه برنامه‌نویسی *جنبه گرا را ابداع کرد.* Jim Hugunin و Erik Hilsdale کامپایلر اصلی. Mik Kersten اجرا IDEو شروع پروژه Eclipse AJDT با Adrian Colyer (رهبر حال حاضر پروژه AspectJ) و اندرو کلمنت (مهندس زمان کامپایلر).

کامپایلر AspectBench توسعه یافته و نگهداری می‌شود به عنوان یک تلاش مشترک از ابزارهای برنامه‌نویسی گروهی در آزمایشگاه دانشگاه آکسفورد، تیم تحقیقاتی sable در دانشگاه مک گیلو مؤسسه تحقیقات پایه در علوم رایانه (BRICS).

### AspectWerkz

AspectWerkz پویا، سبک و با کارایی بالا ی فریمورک AOP/PIPO برای جاوا است. باادغام آن با پروژه که باعث پشتیبانی از قابلیت‌های AspectWerkz پس از AspectJ 5 شده.

Jonas Boner و Alex Vasseur پروژه AspectWerkz را مهندسی کرده‌اند و بعد از آن که پروژه AspectJ با AspectWerkz ادغام شد سبک حاشیه‌نویسی و زمان بارگذاری پشتیبانی می‌کند.

بر خلاف زبان برنامه‌نویسی AspectJ قبل از نسخه 5 AspectWerkz، هیچ ساختار زبانی جدیدی به جاوا اضافه نکرد، اما به جای آن از توضیح جنبه‌های حاشیه نویشی جاوا پشتیبانی کرد. آن با بهره‌گیری از اصلاح bytecodeبرای درست کردن کلاس‌ها در پروژه، زمان لود شدن کلاس و همچنین در زمان اجرا. آن از JVM level APIs. استاندارد شده‌استفاده کرد. جنبه‌ها می‌توانند تعریف بشوند با استفاده از حاشیه‌نویسی جاوا.

AspectWerkz از یک API برای استفاده از جنبه‌های مشابه برای پروکسی‌ها فراهم کرده‌است. از این رو یک تجربهٔ انتقال فراهم کرده که یک ارائه شفاف انتقال برای استفاده کنندهگان مشابه پروکسی‌ها است.

AspectWerkz یک نرم‌افزار رایگان است. مجوز گنو ال‌جی‌پی‌ال اجازه می‌دهد از AspectWerkz 2.0 در هر دو حالت تجاری و پروژه‌های منبع باز استفاده شود.

جستارهای وابسته
---------------

* Aspect-oriented programming
* Spring AOP (بخشی از چارچوب بهار)
* توسعه نرم‌افزار جنبه گرا

کتابشناسی
---------

پیوند به بیرون
--------------

* صفحهٔ رسمی
* زیراکس دارای پتنت ایالات متحده ثبت اختراع 6,467,086 برای AOP/AspectJ اما کد منبع AspectJ تحت مجوز رایج عمومی منتشر شده‌استکه کمک‌های مالی برخی از حقوق ثبت اختراع است.
* 
* AJDT
* 
* 
* Spring AOP and AspectJ مقدمه
* AspectWerkz صفحه خانگی پروژه