gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 11:34:09 24 4
gpt4 key购买 nike

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

具体来说,我正在尝试使用 Spring 配置嵌入式 Jetty 实例,并且需要能够通过 addServlet() 方法注入(inject) 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>

关于Spring:如何使用非setter方法注入(inject)属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10540030/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com