ملف التكوين
في الأمثلة السابقة ، استخدمنا تعريف Bean XML لتكوين المكونات. في مشروع أكبر قليلاً ، عادة ما يكون هناك مئات المكونات. إذا تم تكوين هذه المكونات باستخدام تعريفات حبة XML ، فستزيد بوضوح من حجم ملف التكوين ، مما يجعله غير مناسب جدًا للعثور عليه وصيانته.
يقدم Spring 2.5 آلية مسح مكون تلقائي بالنسبة لنا. يمكن أن تجد فصولًا مشروطة بـ component و service و controller و repository التعليقات التوضيحية تحت classpath ، ودمج هذه الفئات في حاوية الربيع لإدارتها.
وظيفتها هي نفسها استخدام مكونات تكوين عقدة Bean في ملفات XML. لاستخدام آلية المسح التلقائي ، نحتاج إلى فتح معلومات التكوين التالية:
<؟ xmlns: context = "http://www.springframework.org/schema/context" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd "> <contex
إن التكوين <context:component-scan base-package="cn.itcast" /> يسجل ضمنيًا معالجات متعددة من المعالجات التي تحصة التعليقات التوضيحية ، بما في ذلك <context: annotation- <context:component-scan base-package="cn.itcast" /> /> معالج مسجل في التكوين ، أي أن هناك حاجة إلى <context:annotation-config/> ، أي شيء ، <context:annotation-config/> . بالإضافة إلى ذلك ، فإن الحزمة الأساسية عبارة عن حزمة (حزمة فرعية) يجب مسحها ضوئيًا.
التعليقات التوضيحية
يتم استخدام Service لتعليق مكونات طبقة العمل ، ويتم استخدام Controller لتعليق مكونات طبقة التحكم (مثل الإجراء في Struts2) ، ويتم استخدام repository لتعليق مكون الوصول إلى البيانات ، أي مكون DAO. يشير component إلى المكونات. عندما لا يسهل تصنيف المكونات ، يمكننا استخدام هذا التعليق التوضيحي للتعليق.
تعتمد هذه المقالة على حالة التعليق التوضيحي Autowire والتجميع التلقائي.
نقوم أولاً بتغيير ملف تكوين الربيع إلى:
<؟ xmlns: context = "http://www.springframework.org/schema/context" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd "> <contex
مثال
ثم استخدم التعليق التوضيحي لـ Service لتعليق فئة ProfonserviceBean ، على النحو التالي:
servicepublic class personviceBean تنفذ الأشخاص {private persondao persondao ؛ public void setpersondao (persondao persondao) {this.persondao = persondao ؛ } Override public void save () {persondao.add () ؛ }}قم بتعليق فئة persondaobean باستخدام repository التعليق التوضيحي ، على النحو التالي:
repositorypublic class persondaobean تنفذ persondao {override public void add () {system.out.println ("تنفيذ طريقة add () في persondaobean") ؛ }}أخيرًا ، نقوم بتعديل كود فئة SpringTest إلى:
الفئة العامة springtest {test public void desancespring () {AbstractapplicationContext ctx = new ClassPathxMlAppLicationContext ("beans.xml") ؛ PropoSonservice Personservice = (PersonService) ctx.getBean ("personerviceBean") ؛ persondao persondao = (persondao) ctx.getbean ("persondaobean") ؛ system.out.println (personservice) ؛ system.out.println (persondao) ؛ ctx.close () ؛ }}اختبر طريقة instances () ويمكنك أن ترى أن وحدة التحكم في Eclipse يطبع:
إذا أردنا استخدام الاسم المحدد للحصول عليه ، فيمكننا تعديل رمز فئة PersonServiceBean إلى:
Service ("Personservice") Public Class PropoSonserviceBean تنفذ الأشخاص {Private persondao persondao ؛ public void setpersondao (persondao persondao) {this.persondao = persondao ؛ } Override public void save () {persondao.add () ؛ }}وبهذه الطريقة ، يجب تغيير رمز فئة Springtest إلى:
الفئة العامة springtest {test public void desancespring () {AbstractapplicationContext ctx = new ClassPathxMlAppLicationContext ("beans.xml") ؛ Profonsevice PropoSonservice = (PersonService) CTX.GetBean ("Personservice") ؛ system.out.println (personservice) ؛ ctx.close () ؛ }}اختبر طريقة instances () ويمكنك أن ترى أن وحدة التحكم في Eclipse يطبع:
لقد تعلمنا نطاق الفاصوليا التي تديرها الربيع من قبل ، ويمكننا أن نعلم أن نطاق الفاصوليا المديران في الربيع أعلاه هو Singleton افتراضيًا. بالطبع ، يمكننا أيضًا تغيير نطاق الفاصوليا التي تديرها الربيع ، مثل تغيير كود فئة ProfonserviceBean إلى:
service ("personservice") scope ("النموذج الأولي") Public Class PersonviceBean تنفذ Profondservice {private persondao persondao ؛ public void setpersondao (persondao persondao) {this.persondao = persondao ؛ } Override public void save () {persondao.add () ؛ }}وهذا يعني أن نطاق profonserviceBean الذي يديره الربيع أصبح نموذجًا أوليًا. في هذا الوقت ، نقوم بتعديل رمز فئة springtest إلى:
الفئة العامة springtest {test public void desancespring () {AbstractapplicationContext ctx = new ClassPathxMlAppLicationContext ("beans.xml") ؛ propersencervice1 = (personservice) ctx.getBean ("personservice") ؛ Profoncservice PersonService2 = (PersonService) CTX.GetBean ("Personservice") ؛ system.out.println (personvice1 == personservice2) ؛ ctx.close () ؛ }}اختبر طريقة instances () ويمكنك أن ترى أن وحدة التحكم في Eclipse يطبع:
نطاق النموذج الأولي يعني أنه في كل مرة تحصل فيها على حاوية من حاوية زنبركية ، فهو كائن جديد.
إذا تم تضمين المكونات في حاوية الزنبرك عن طريق المسح تلقائيًا ضمن مسار ClassPath ، وكيفية تحديد طريقة التهيئة وطريقة التدمير للفاصوليا؟ في هذا الوقت ، نحتاج إلى استخدام اثنين من التعليقات التوضيحية: postconstruct و predestroy. للتجريب ، قمنا بتعديل كود فئة PersonServiceBean إلى:
Service ("Personservice") Public Class PropoSonserviceBean تنفذ الأشخاص {Private persondao persondao ؛ postConstruct public void init () {system.out.println ("initialize Resource") ؛ } predestroy public void dorder () {system.out.println ("Destroy ، Wear Resource") ؛ } public void setpersondao (persondao persondao) {this.persondao = persondao ؛ } Override public void save () {persondao.add () ؛ }}بعد ذلك ، نحتاج إلى تعديل كود فئة springtest إلى:
الفئة العامة springtest {test public void desancespring () {AbstractapplicationContext ctx = new ClassPathxMlAppLicationContext ("beans.xml") ؛ Profonsevice PropoSonservice = (PersonService) CTX.GetBean ("Personservice") ؛ ctx.close () ؛ }}وبهذه الطريقة ، اختبر طريقة instancespring () وطباعة وحدة التحكم Eclipse:
لعرض الرمز المصدر ، انقر للسماح لـ Spring تلقائيًا بالمسح وإدارة الفاصوليا للتنزيل.
لخص
ما سبق هو حزمة المسح التلقائي للسبع الذي أدخله المحرر. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!