Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring:如何使用非setter方法注入属性?_Spring_Dependency Injection_Jetty - Fatal编程技术网

Spring:如何使用非setter方法注入属性?

Spring:如何使用非setter方法注入属性?,spring,dependency-injection,jetty,Spring,Dependency Injection,Jetty,是否可以通过签名不以set开头的方法注入属性bean 具体来说,我正在尝试使用Spring配置嵌入式Jetty实例,并且我需要能够通过addServlet()方法注入servlet bean。我猜您的意思是调用ServletContextHandler.addServlet()。你几乎没有选择: @配置(从3.0开始) 我最喜欢的方法。您可以使用Java配置一切 @Configuration public class Jetty { @Bean(initMethod = "start")

是否可以通过签名不以
set
开头的方法注入属性bean

具体来说,我正在尝试使用Spring配置嵌入式Jetty实例,并且我需要能够通过
addServlet()
方法注入servlet bean。我猜您的意思是调用
ServletContextHandler.addServlet()
。你几乎没有选择:

@配置
(从3.0开始) 我最喜欢的方法。您可以使用Java配置一切

@Configuration
public class Jetty {
    @Bean(initMethod = "start")
    public Server server() {
        Server server = new Server(8080);
        server.setHandler(context());
        return server;
    }

    @Bean
    public ServletContextHandler context() {
        ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS);
        context.setContextPath("/");
        context.addServlet(servlet(), "/*");
        return context;
    }

    @Bean
    public ServletHolder servletHolder() {
        return new ServletHolder(helloServlet());
    }

    @Bean
    public HelloServlet helloServlet() {
        return new HelloServlet();
    }
}
继承/装饰 您可以继承或包装原始的
ServletContextHandler
类,以遵循JavaBean命名约定。当然,它需要一个额外的类,但使Jetty类对Spring友好。你甚至可以发布这样的包装,或者有人已经这么做了

我不喜欢这种方法,因为它看起来太低了。基本上,您创建了一个用任意参数调用任意方法的bean:

<bean id="javaVersion" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
 <property name="targetObject" ref="servletContextHandler"/>
 <property name="targetMethod" value="addServlet"/>
 <property name="arguments">
   <list>
     <ref bean="yourServlet"/>
   </list>
 </property>
</bean>

仅适用于Jetty 7的spring文件。可以添加您的ContextHandler

<bean id="contexts"
    class="org.eclipse.jetty.server.handler.ContextHandlerCollection" />

<context:property-placeholder location="src/main/resources/ws.properties" />

<!-- Manually start server after setting parent context. (init-method="start") -->
<bean id="jettyServer" class="org.eclipse.jetty.server.Server"
    destroy-method="stop">
    <property name="threadPool">
        <bean id="ThreadPool" class="org.eclipse.jetty.util.thread.QueuedThreadPool">
            <property name="minThreads" value="10" />
            <property name="maxThreads" value="50" />
        </bean>
    </property>
    <property name="connectors">
        <list>
            <bean id="Connector" class="org.eclipse.jetty.server.nio.SelectChannelConnector">
                <property name="port" value="8181" />
            </bean>
        </list>
    </property>
    <property name="handler">
        <bean id="handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
            <property name="handlers">
                <list>
                    <ref bean="contexts" />
                    <bean id="defaultHandler" class="org.eclipse.jetty.server.handler.DefaultHandler" />
                    <bean class="org.eclipse.jetty.servlet.ServletContextHandler"
                        p:contextPath="/${ws.context.path}">
                        <property name="sessionHandler">
                            <bean class="org.eclipse.jetty.server.session.SessionHandler" />
                        </property>
                        <property name="servletHandler">
                            <bean class="org.eclipse.jetty.servlet.ServletHandler">
                                <property name="servlets">
                                    <list>
                                        <bean class="org.eclipse.jetty.servlet.ServletHolder"
                                            p:name="spring-ws">
                                            <property name="servlet">
                                                <bean
                                                    class="org.springframework.ws.transport.http.MessageDispatcherServlet" />
                                            </property>
                                            <property name="initParameters">
                                                <map>
                                                    <entry key="contextConfigLocation" value="classpath:/spring-ws-context.xml" />
                                                </map>
                                            </property>
                                        </bean>
                                    </list>
                                </property>
                                <property name="servletMappings">
                                    <list>
                                        <bean class="org.eclipse.jetty.servlet.ServletMapping"
                                            p:servletName="spring-ws" p:pathSpec="/*" />
                                    </list>
                                </property>
                            </bean>
                        </property>
                    </bean>
                    <bean class="org.eclipse.jetty.server.handler.RequestLogHandler" /> 
                </list>
            </property>
        </bean>
    </property>
</bean>