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

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

具体来说,我正在尝试使用Spring来配置嵌入式Jetty实例,我需要能够通过addServlet()方法注入一个servlet bean.

解决方法:

我在看Jetty/Tutorial/Embedding Jetty documentation.我猜你的意思是调用ServletContextHandler.addServlet().你几乎没有选择:

@Configuration(自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类以遵循Java bean命名约定.当然它需要一个额外的类,但使Jetty类对Spring友好.你甚至可以发布这样的包装器或者某人已经这样做了吗?

MethodInvokingFactoryBean

我不喜欢这种方法,因为它看起来太低了.基本上,您创建一个使用任意参数调用任意方法的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>
上一篇:java – BeanCurrentlyInCreationException Spring Boot


下一篇:Jetty,Spring,Run问题