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
将Java类初始化转换为Springbean_Java_Spring - Fatal编程技术网

将Java类初始化转换为Springbean

将Java类初始化转换为Springbean,java,spring,Java,Spring,我希望在将Java类初始化转换为Springbeans方面找到一些帮助。我没有在SpringBean上做太多工作,并且遇到了各种各样的错误。Java版本没有问题 Java版本: SSLContextBuilder builder = new SSLContextBuilder(); builder.loadTrustMaterial(null, new TrustSelfSignedStrategy()); SSLConnectionSocketFactory sslsf = new SSLCo

我希望在将Java类初始化转换为Springbeans方面找到一些帮助。我没有在SpringBean上做太多工作,并且遇到了各种各样的错误。Java版本没有问题

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)">
但是,一旦我从第一个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作为Springbeans的正确方法吗


。。。非常感谢你的时间

传递的参数是字符串。即字符串null和字符串ssl_策略。 尝试以下操作,它将传递一个实际的null和对ssl_策略bean的引用:


首先,没有人再使用SpringXML了,主要是因为现在是2017年,某种程度上是因为XML不是类型安全的,IDE在某种程度上帮不了你,但你必须为此付费

其次,我不认为一个全球SSL连接工厂是一个很好的主意;使用SSL,您希望尽可能地将其本地化,而不是让每个人都有一个单独的bean

也就是说,您的Java代码可以简单地制作成bean,如下所示:

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

    return new SSLConnectionSocketFactory(builder.build());
}

将以上内容放入@Configuration类,就这样

伙计,再也没有人使用SpringXML了。使用Java@Configurationclasses,让IDE和编译器帮助您。我在想,因为我在ApacheCamel上下文中,SSL对象在其他任何地方都无法访问。还是这仍然是一个问题?如果是这样的话,那么是的,我会把它放在一条驼峰路线的本地。我的驼峰脚本每秒调用多次,所以我宁愿保持它的苗条。此外,它运行的环境位于一个安全、封闭系统上的防火墙后面。@user2917629我不是说它可以在JVM之外访问。我是说应用程序中的任何类都可以获得它,这就是不使用XML的原因。OP不可能用JavaConfig犯这个错误。
 java.lang.NoSuchMethodException: org.apache.http.conn.ssl.SSLContextBuilder.loadTrustMaterial(java.lang.String, java.lang.String)   
<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>
@Bean
SSLConnectionSocketFactory sslConnectionSocketFactory() {
    SSLContextBuilder builder = new SSLContextBuilder();
    builder.loadTrustMaterial(null, new TrustSelfSignedStrategy());

    return new SSLConnectionSocketFactory(builder.build());
}