将 Java 类启动转换为 Spring Bean



我希望在将Java类启动转换为Spring bean方面找到一些帮助。我对春豆的工作不多,并且遇到了各种错误。Java版本工作没有问题。

爪哇版本:

SSLContextBuilder builder = new SSLContextBuilder();
builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(builder.build()); 

春豆:

<spring:bean id="ssl_strategy" class="org.apache.http.conn.ssl.TrustSelfSignedStrategy" init-method="init"/>       
<spring:bean id="ssl_builder" class="org.apache.http.conn.ssl.SSLContextBuilder" init-method="loadTrustMaterial(null, ssl_strategy)">

我收到一个错误,即TrustSelfSignedStrategy没有方法"init"。错误 :

Couldn't find an init method named 'init' on bean with name 'ssl_strategy'

但是一旦我从第一个 bean 中删除 init-method="init",那么我就会收到 .loadTrustMaterial 方法的错误:

Couldn't find an init method named 'loadTrustMaterial(null, ssl_strategy)' on bean with name 'ssl_builder'

编辑#1:我也尝试使用org.springframework.beans.factory.config.MethodInvokingFactoryBean,如下所示,这是迄今为止我认为最接近的:

<spring:bean id="ssl_strategy" class="org.apache.http.conn.ssl.TrustSelfSignedStrategy" /> 
<spring:bean id="ssl_builder" class="org.apache.http.conn.ssl.SSLContextBuilder" />
<spring:bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<spring:property name="targetObject" ref="ssl_builder"/>
<spring:property name="targetMethod" value="loadTrustMaterial"/>
<spring:property name="arguments">
<spring:list>
<spring:value>null</spring:value>
<spring:value>ssl_strategy</spring:value>
</spring:list>
</spring:property>
</spring:bean>

但上述结果会导致以下错误:

java.lang.NoSuchMethodException: org.apache.http.conn.ssl.SSLContextBuilder.loadTrustMaterial(java.lang.String, java.lang.String)   

有人可以在这里发布将上述 Java 作为 Spring bean 的正确方法吗?

。非常感谢您的时间。

您传递的参数是字符串。IE 字符串"null"和字符串"ssl_strategy"。
尝试以下操作,它应该传递实际null和对ssl_strategyBean 的引用:

<spring:bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">
<spring:property name="targetObject" ref="ssl_builder"/>
<spring:property name="targetMethod" value="loadTrustMaterial"/>
<spring:property name="arguments">
<spring:list>
<spring:null />
<spring:ref bean="ssl_strategy"/>
</spring:list>
</spring:property>
</spring:bean>

首先,没有人再使用Spring XML,主要是因为它是2017年,有点因为XML不是类型安全的,IDE不能帮助你(在某种程度上IntelliJ IDEA Ultimate可以,但你必须为此付费(。

其次,我不认为全球SSL连接工厂是一个好主意;使用SSL,您希望尽可能多地保持本地化,而不是让每个人都闲逛。

也就是说,你的Java代码可以简单地变成bean,就像这样:

@Bean
SSLConnectionSocketFactory sslConnectionSocketFactory() {
SSLContextBuilder builder = new SSLContextBuilder();
builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());
return new SSLConnectionSocketFactory(builder.build());
}

将以上内容放在@Configuration类中,仅此而已!

最新更新