我有两个项目,第一个是spring boot app,第二个是java静态库项目,除了java之外不依赖于任何其他东西。在过去,这两个项目是一个项目,但我将它们分开,因为它们代表两个不同的逻辑组件,并且java库也用于其他子项目。现在,由于静态库只是一个jar,我无法根据提供的接口名称实例化该jar的类,例如我们在spring中执行它,例如,如果我的接口位于路径中:
edu.university.ServiceLayer.StudentInterface
我很容易做到:
Student object = (Student) applicationContext.getBean("StudentInterface");
这给了我学生对象
现在我想对外部java库做同样的事情。由于我从未这样做过,我的问题是如果要记住我希望保持该库不依赖于除java之外的任何其他内容,那么最好的方法是什么。
在我的春季启动项目中,为了做到这一点,我只需要使用正确的artifcat,即@ Component,@ Repository @Service等来注释所选bean,然后这些bean由spring结构自动管理。即然后我可以通过打印applicationContext的BeanDefinitionNames()来看到它们,即
String[] beanNames = applicationContext.getBeanDefinitionNames();
但是这个技巧不适用于外部jar。现在对于这个星座来说最好的折衷方案是什么,即shell我真的将弹簧依赖添加到我的jar java库中,或者是否有任何神奇的方法可以做到这一点而无需将这些依赖项添加到我的库中。我的目标是允许spring管理外部库的选定bean,即我希望它们出现在:
之下applicationContext.getBeanDefinitionNames()
有没有用于实现此目的的模式方式?
非常感谢你的想法。答案 0 :(得分:1)
这与Spring Integration根本没有关系。
另外,您必须阅读更多documentations。
CLASSPATH中可用的任何类都可以在Spring容器中实例化为bean,例如
@Bean
public Foo foo() {
return new Foo();
}
当你的Foo
在你的罐子里时。无需为那些刻板印象注释修改它们。
BTW,更清楚的是,您甚至可以为Java本机类创建bean:
@Bean
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public Date now() {
return new Date();
}