کار ساده ای نیست. تنها راهی که میشه متصور شد استفاده از برنامه نویسی Aspect Oriented (مخفف: AOP) . که از AspectJ یا Spring AOP می شه استفاده کرد. به عنوان منبع هم مستندات spring aop و یا کتاب AspectJ in Action توصیه می شه.
در حالت عادی اگر بخواهیم عملیاتی در ابتدای هر متد انجام بدیم، کد رو داخل بدنه تابع باید بزنیم:
public void sendReceipt(ReceiptInfo receipt)
{
if(permissionUtils.isCurrentUserAuthorized(receipt,"send"))
{
//send receipt
}
//throw a permission exception
}
با استفاده از AOP میشه یک annotation برای انجام اون کار تعریف کرد و دیگر در داخل بدنه تابع کدی زده نمی شه (قبل از اجرای متد، سطح دسترسی فرد در کدِ منتسب به Secure@ چک شده و در صورت عدم اجازه دسترسی، exceptionای پرتاب می شود و از اجرای متد جلوگیری می شود)
@Secure(...)
public void sendReceipt(ReceiptInfo receipt)
{
//send receipt
}