这似乎是一个简单的问题,但在搜索文档和论坛时却找不到明确的答案。我正在从xml迁移到基于Java的配置(春季5.1.9)。由于xml config中的一些遗留限制,我需要从某些端库的非公共类创建一个bean:
SampleClass.class
package side.library
class SampleClass {
//... some code here
}
context.xml
...
<bean id = "sampleId" class "side.library.SampleClass">
...
这很好用,因为Spring在内部使用反射,并且它在编译/运行时没有任何问题地创建Bean,但是在基于Java的配置中使用此类会导致访问错误:
package my.configuration;
import side.library.SampleClass; // 'side.library.SampleClass' is not public in 'side.library'. Cannot be accessed from outside package
@Configuration
public class JavaConfiguration{
@Bean
public SampleClass sampleClass() {
return new SampleClass(); // same error text
}
}
那么,处理这种缝合的正确方法是什么?在@Configuration类中使用反射库来到达此类似乎不是一个好主意。
最佳答案
只是一种解决方法:在外部项目的同一包中创建一个包装器类,并在您的配置中使用该类。
package com.legacy;
public class Wrapper {
private LegacyImpl legacyImpl;
public Wrapper()
this.legacyImpl = new LegacyImpl();
}
public void wrappedMethod() {
this.legacyImpl.wrappedMethod();
}
}