![](/img/trans.png)
[英]How can I @Autowire a spring bean that was created from an external jar?
[英]SpringBoot: Can I @Autowire Bean in runnable JAR from JAR provided using java -cp?
我有包含界面的可運行JAR A:
interface FooInterface {
void foo();
...
}
在JAR AI中,還有一個類試圖自動裝配FooInterface實現:
class Other{
@Autowired
FooInterface fooInterfaceImplementation;
...
}
在其他項目BI中,將jar A作為外部庫和FooInterface的實現:
@Component
class BarClass implements FooInterface {
void foo(){...}
...
}
我正在嘗試使用以下命令,使用JAR B中的類運行可運行的A JAR:
java -jar A.jar -cp B.jar
但這以以下異常結尾:
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type 'com.ocado.cfc.optimisation.AlgorithmInterface' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:348)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:335)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1093)
at com.ocado.cfc.optimisation.Executable.main(Executable.java:81)
是否可以通過這種方式自動連接所需的bean?
任何幫助,高度贊賞。
是的,為了讓Spring從類路徑JAR文件中檢測/掃描bean,您需要使用類級別注釋@ComponentScan(basePackages="com.ocado")
將包添加到spring boot啟動器類中。
如果嘗試同時使用-jar
和-cp
,則不可能。 使用-jar
時-cp
被忽略。
如果要在類路徑上有多個jar,可以使用-cp
將它們都傳遞給它們。 然后,您還必須提供要啟動的主類的名稱。 假設您似乎正在使用Spring Boot,則可能看起來像這樣:
java -cp A.jar:B.jar org.springframework.boot.loader.JarLauncher
您可能還對Spring Boot的PropertiesLauncher
感興趣,該PropertiesLauncher
使您可以創建帶有可配置類路徑的可執行jar。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.