‫کار انوتیشن های PreDestroy و PostConstruct

‫ابتدا توجه شما را به انوتیشن های استاندارد موجود در Java Platform – JavaEE جلب میکنیم:

PreDestroy PostConstruct Usage

‫حال به دو انوتیشن مهم که در چرخه ساخته شدن Bean ها و از بین رفتن آن ها نقش مهمی را ایفا می کنند می پردازیم :

 

postConstruct

‫- ‫این انوتیشن بعد از وقتی که Inject روی یک BEAN انجام میشه فراخوانی میشه.
‫- همیشه این متد باید قبل از اینکه BEAN در داخل سرویس دهنده DI قرار بگیره فراخوانی بشه.
‫- این انوتیشن باید در داخل هر کلاس مرتبط با DI پشتیبانی شود.
‫- حتی اگر کلاس درخواستی Bean ی برای اجرای فرایند DI نداشته باشه باز هم این متد فراخوانی می شود!

در داخل PostConstrcut باید این مسائل رعایت بشه:
‫۱- متد مورد نظر هیچ پارامتری نباید داشته باشه مگر اینکه در داخل EJB یه ‫interceptor ی وجود داشته باشه که بخوایم بهش InvocationContext رو پاس بدیم!

‫۲- همیشه باید خروجی متد VOID باشه‫
‫۳- متد میتونه بحالت public – protected ، package یا private تعریف شود
‫۴- متد نباید static باشه مگر برای application client‫‫
‫۵- متد میتونه هم final و هم غیر final باشه مگر در کیس EJB که همیشه باید غیر final باشه
‫۶- اگر متد یه Exception عه unchecked رو پرتاب کنه، کلاس مورد نظر نباید بعنوان Service قرار داده بشه! در مورد EJB ها متدی که با PostConstruct انوتیشن گذاری شده، میتونه Exception هارو هندل کنه و کارهای مربوط به تمیز کاری رو قبل از دور انداخته شدن Bean انجام بده!

PreDestroy

‫- ‫‫انوتیشن‫ PreDestroy مثل یه callback آگاه کننده عمل میکنه که در این حالت آبجکت تو پروسه ی پاک شدن از Container عه DI هستش.
‫- متدهایی که با PreDestroy انوتیشن گذاری میشن معمولا برای آزاد سازی منابع هایی که نگهداری شده اند، استفاده می شوند.
‫-این انوتیشن باید توسط همه Container هایی که PostContainer رو پیاده سازی کردند، پشتیبانی شود بجز application client container های موجود در JavaEE 5. ‫

در داخل PreDestroy باید این مسائل رعایت بشه‌:
‫۱- متد مورد نظر هیچ پارامتری نباید داشته باشه مگر اینکه در داخل EJB یه interceptor ی وجود داشته باشه که بخوایم بهش InvocationContext رو پاس بدیم!
‫۲- خروجی متد باید VOID باشه
‫۳- متد هیچ Exception عه checked رو نباید پرتاب کند
‫۴- متد میتونه بحالت public – protected ، package یا private تعریف شود
‫۵- متد نباید static باشد
‫۶- متد میتونه هم final و هم غیر final باشه مگر در کیس EJB که همیشه باید غیر final باشه
‫۷- اگر متد یه Exception عه unchecked رو پرتاب کند، اتفاق خاصی نمی افتد و در نظر گرفته نمیشود مگر در موارد EJB ها که متد انوتیشن گذاری شده با PreDestroy میتوانند، این Exception هارو هندل کنند.

 

 

 

 

Published by

mehdi

I'm a Passionate Software Developer and Team Leader