Using Guice 3 with JAX-WS in Java 6 outside web container

后端 未结 2 1479
生来不讨喜
生来不讨喜 2021-02-10 03:12

We have a situation where we use JSR-330 based injections to configure our stand-alone Java 6 applications, which works very well for getting configuration parameters across all

2条回答
  •  别跟我提以往
    2021-02-10 03:56

    you need to use the AbstractMultiInstanceResolver extension point.

    create the annotation GuiceManaged;

    @Retention(RUNTIME)
    @Target(TYPE)
    @Documented
    @WebServiceFeatureAnnotation(id=GuiceManagedFeature.ID, bean=GuiceManagedFeature.class)
    @InstanceResolverAnnotation(GuiceManagedInstanceResolver.class)
    public @interface GuiceManaged {
    }
    

    implement the GuiceManagedFeature which is WebServiceFeature :

    public class GuiceManagedFeature extends WebServiceFeature {
        public static final String ID="FEATURE_GuiceManaged";
    
        @FeatureConstructor
        public GuiceManagedFeature()
        {
            this.enabled=true;
        }
    
        public String getID() {
            return ID;
        }
    }
    

    Implement InstanceResolver by Extending AbstractMultiInstanceResolver

    public class GuiceManagedInstanceResolver extends AbstractMultiInstanceResolver {
        private T instance=null;
        public GuiceManagedInstanceResolver(@NotNull Class clazz)
        {
            super(clazz);
        }
        public T resolve(@NotNull Packet request) {
            if(instance==null)
            {
                instance=create();
                Injector injector= Guice.createInjector(new WebServiceModule());
                injector.injectMembers(instance);
            }
            return instance;
        }
    }
    

    Now Annotate your Service with @GuiceManaged & use @Inject for method level DI on your business method.

提交回复
热议问题