دعم مساحة الاسم
لتنفيذ دعم مساحة الاسم ، يجب أن يتم توريثه من PacePaceHandLersupport.
حزمة com.codestd.spring.cxf.config.schema ؛ استيراد org.springframework.beans.factory.xml.namespacehandlersupport 1.0.0*/فئة عامة webserviceannotationnamespaceHandler تمتد على nameshandlersuport
استخدم طريقة registerBeanDefinitionParser لشرح دعم التكوين المضافة إلى الربيع. Enotation-endpoint هو عنصر مدعوم بالتكوين. التعليق التوضيحي extationBeanDefinitionParser هو فئة تعالج التكوين. EndPointBeanProcessor هو فئة تعالج نقطة endpoint المشروح ، وسيتم وصفها بالتفصيل لاحقًا.
تكوين المعالجة
تحتاج إلى تنفيذ beandefinitionparser
package com.codestd.spring.cxf.config.schema ؛ استيراد org.springframework.beans.factory.config.beandefinition ؛ import org.springframework.beans.factory.support.support.rotbeandianition ؛ org.springframework.beans.factory.xml.beandefinitionparser 1.0.0*/annotationbeandefinitionparser تنفذ beandefinitionparser {الفئة النهائية الخاصة <؟> beanclass ؛ التعويذ العام beandefinitionparser (class <؟> beanclass) {this.beanclass = beanclass ؛ BeanDefinition = جديد ROOTBEANDEFINITION () ؛ beandefinition.setBeanClass (beanclass) ؛ beandefinition.setLazyInit (false) ؛ string id = element.getattribut name ؛ else id = beanclass.getName () ؛} if (parsercontext.getRegistry (). containsbeandefinition (id)) {رمي جديد alfortbalstateException ( element.getAttribute ("package") ؛ if (! stringUtils.isempty (enrotationPackage)) BeanDefinition.getPropertyValues (). Add ("annotationpackage" ، enronotationpackage) ؛ return beandefinition ؛}}لتطبيق BeanDefinitionParser ، يرجى الرجوع إلى وثائق الربيع الرسمية.
فئة أدوات تسجيل الفول
package com.codestd.spring.cxf.config ؛ استيراد org.springframework.beans.beansexte ؛ org.springframework.beans.factory.support.beandefinitionregistry ؛ استيراد org.springframework.context.applicationContext ؛ import org.springframework.context.applicationContextAware ؛ يجب حقن Spring ApplicationContext {this.applicationContext = applicationContext ؛ if (ApplicationContext easuleof configurableApplicationContext) {this.configurableApplicationContext = (configurableApplicationContext) this.ApplicationContext ؛} ApplicationContext) {this.setAppLicationContext (ApplicationContext) ؛} سجل الفاصوليا العامة (الفئة <؟> clazz) {if (configurableApplicationContext == null) return null ؛ BeanDefinitionBuilder = this.createBuilder (clazz) ؛ beandefinition efindefinition = BeanDefinitionBuilder.getRawBeanDefinition () ؛ beandefinitonregistry.registerbeandefinition (clazz.getname () ، definition) ؛ CreateBuilder (class <؟> clazz) {BeanDefinitionBuilder BeanDefinitionBuilder = BeanDefinitionBuilder.genericbeandefinition (clazz) ؛ return BeanDefinitionBuilder ؛}}معالجة endPoint
package com.codestd.spring.cxf.config ؛ استيراد org.springframework.beans.beansextive ؛ استيراد org.springframework.beans.factory.disposablebean ؛ استيراد org.springframework.beans.factory.config.beanfactorpocester ؛ org.springframework.beans.factory.config.configurableListableBeanfactory ؛ استيراد org.springframewokor. org.springframework.context.annotation.claspathbeandefinitionscanner Jaune (Wangchengwei)* since 1.0.0*/public endpointbeanprocessor تنفذ beanfactorypostprocessor ، dispialablebean ، beanpostprocessor ، applicationContextAware {private final string comma_split_pattern = "،" beanregistry ؛ public void setannotationpackage (String annotationPackage) {this.annotationpackage = annotationPackage ؛ if (! stringUtils.isempty (this.annotationpackage)) setApplicationContext (ApplicationContext ApplicationContext) يلقي Beansexception {this.applicationContext = ApplicationContext ؛ هذا. null) {system.out.println (bean.getClass ()) ؛} إرجاع الفول ؛} @overridepublic object postprocessbeforeInitialization (كائن بين ، سلسلة beanname) يتلاء Bean) {if (enoTationPackages == null || enrotationpackages.length == 0) {return true ؛} string beanclassname = bean.getclass (). com.codestd.spring.cxf.annotation.endpoint} التعليق التوضيحي*/@overridepublic void postprocessbeanfactory (configurableListableBeanfactory beanfactory) يلقي beansexception {if (annotationpackage == null || BeanDefinitionregistry) {beandefinitionregistry beandefinitionregistry = (BeanDefinitionregistry) beanfactory ؛ inconotationTypefilter (endpoint.class) ؛ scanner.addincludefilter (filter) ؛ scanner.scan (annotationpackages) ؛}}} تم تنفيذ مسح التعليقات التوضيحية هنا. ثم تحتاج إلى كتابة رمز معالجة الأعمال في طريقة ما بعد المعالجة. بعد ذلك يعني أن الفول قد تم إنشاؤه وحقنه بالسمات.
يستخدم postprocessbeforeInitialization بشكل أساسي لحقن الخصائص عند إنشاء مثيل للفاصوليا.
دع الربيع يتعرف على الامتدادات
أولاً إنشاء spring.handlers تحت meta-inf في classpath ، المحتوى كما يلي
http/: //www.codestd.com/schema/std/ws=com.codestd.spring.cxf.config.schema.webserviceannotationnamespacehandler
في هذا الملف ، حدد مساحة الاسم التي تحتاج إلى فئة يجب التعامل معها.
ثم إنشاء spring.schemas
http/: //www.codestd.com/schema/std/ws/stdws-1.0.xsd=meta-inf/schema/stdws-.0.xsd=meta-inf/schema/stdws-.0.xsd
حدد موقع ملف SECHMA ، سيستخدم Spring ملف XSD الذي تم صياغته هنا للتحقق من أن التكوين صحيح.
امتحان
إنشاء واجهة
package com.codestd.spring.cxf.ws ؛ import javax.jws.webservice ؛/*** author jaune (wang chengwei)*since 1.0.0**/@webservicepublic interface helloservice {public string syhi (string) ؛} ؛فئة التنفيذ
package com.codestd.spring.cxf.ws ؛ import javax.jws.webservice ؛ import com.codestd.spring.cxf.annotation.endpoint ؛/*** author jaune (wang chengwei)*since 1.0.0*/expoint "HelloServiceendPoint")@webservice (EndPointInterface = "com.codestd.spring.cxf.ws.helloservice") public class helloserviceimpl تنفذ helloservice {Overridepublic String syhi (اسم السلسلة) {return "hello"+name ؛}}}}}}}}}}}}}}}}}}}}}حالات الاختبار
Runwith (SpringJunit4ClassRunner.Class) ContextConfiguration (مواقع = {"classpath: applicationContext.xml"}) التهيئة العامة {testpublic void test () {}} هناك قطعة من التعليمات البرمجية في فئة المعالجة التي تطبع جميع الفئات باستخدام التعليق التوضيحي لـ inNdPoint ، لذلك إذا تمت طباعة اسم الفصل ، فهذا يعني أن التكوين طبيعي.
تشغيل حالات الاختبار
يمكن أن ترى وحدة التحكم
class com.codestd.spring.cxf.ws.helloserviceimpl
من خلال إدخال المحتوى أعلاه ، يتم تحقيق هذا الامتداد بشكل أساسي.