我有两个项目,第一个是 spring boot 应用程序,第二个是 java 静态库项目,它不依赖于除 java 之外的任何其他项目。在过去,这两个项目是一个项目,但是我将它们分开,因为它们代表两个不同的逻辑组件,并且该 java 库也在其他子项目中使用。现在,由于静态库只是一个 jar,我无法根据提供的接口(interface)名称实例化该 jar 的类,就像我们在 spring 中所做的那样,例如,如果我的接口(interface)位于路径中:
edu.university.ServiceLayer.StudentInterface
我很容易做到:
Student object = (Student) applicationContext.getBean("StudentInterface");
这给了我学生对象
现在我想对外部 java 库做同样的事情。由于我从未这样做过,所以我的问题是,如果记住我希望该库不依赖于除 java 之外的任何其他内容,那么最好的方法是什么。
在我的 Spring Boot 项目中,为了做到这一点,我只需要使用正确的 artifcat 来注释所选的 bean,即 @Component、@Repository @Service 等,然后这些 bean 由 Spring Fabric 自动管理。 IE。然后我可以通过打印 applicationContext 的 BeanDefinitionNames() 来看到它们,即
String[] beanNames = applicationContext.getBeanDefinitionNames();
但是这个技巧不适用于外部 jar。现在对于这个星座来说,最好的妥协是什么,即 shell 我真的将 spring 依赖项添加到我的 jar java 库中,或者有什么神奇的方法我可以做到这一点而不将这些依赖项添加到我的库中。我的目标再次是允许 spring 管理外部库的选定 bean,即我希望它们出现在:
applicationContext.getBeanDefinitionNames()
是否有任何类似模式的方法可以用来完成此任务?
非常感谢您的想法。
最佳答案
这与 Spring Integration 无关根本不。
此外,您还必须阅读更多内容 documentations .
CLASSPATH 中可用的任何类都可以实例化为 Spring 容器中的 bean,例如
@Bean
public Foo foo() {
return new Foo();
}
当 Foo
在你的 jar 里时。无需修改这些构造型注释。
顺便说一句,更清楚地说,您甚至可以为 Java native 类创建 bean:
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public Date now() {
return new Date();
}
关于java - 强制外部java(jar项目)库bean由Spring Fabric管理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36332709/