<bean id="beanTest" class="com.test.BeanTest">
<property name="param" value="test"/>
</bean>
@configuration
public class JavaConfig {
@Bean
public BeanTest beanTest() throws Exception {
Constructor constructor = BeanTest.class
.getDeclaredConstructor();
constructor.setAccessible(true);
BeanTest beanTest = (BeanTest) constructor
.newInstance();
beanTest.setParam("test");
return beanTest;
}
}
假设- 1)Bean测试在其他库中。 2)BeanTest具有用于参数的setter,但构造函数是私有的。
问题陈述- 我想删除applicationContext.xml文件,并想使用java config类来定义bean。
解决方案- 我尝试使用反射成功。
这是正确的解决方案还是我们可以解决此问题的其他方法?
谢谢。
答案 0 :(得分:0)
出于某种原因,它具有私有构造函数。创建者没有实例化该类。
对于包含上下文/数据的类,应在您的应用程序中仅出现一次(Singleton模式)。在这种情况下,创建第二个实例将破坏该库或导致不可预测的行为。此类库通常提供检索此单例实例的方法: org.springframework.security.core.context.SecurityContextHolder.getContext()
用于确保春季安全。您可以将该实例注册为bean:
@Bean
public SecurityContext securityContext() {
return SecurityContextHolder.getContext();
}
如果以上两种情况都不是您要使用的库的情况。我想问一下库是否设计合理,并且可能会在我的应用程序中尽量避免使用它。