我需要在我的 Spring 引導應用程式中使用的類中獲取自動裝配的 EntityManagerFactory。我認為問題源于我的課程在一個單獨的包中。
我生成了一個簡單的示例案例來說明我正在嘗試做的事情。
這是應用程式類:
package test;
import javax.persistence.EntityManagerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import test2.GetEMF;
@SpringBootApplication
public class AutoWiredTest implements CommandLineRunner {
@Autowired
private EntityManagerFactory emf;
@Override
public void run(String... args)
throws Exception {
if( emf == null )
System.out.println("Top: EMF is null");
else
System.out.println("Top: Got EMF instance");
new GetEMF();
}
public static void main(String[] args)
throws Exception {
SpringApplication.run(AutoWiredTest.class, args);
}
}
這是另一個包中的 GetEMF 類:
package test2;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceContext;
import org.springframework.beans.factory.annotation.Autowired;
@PersistenceContext
public class GetEMF {
@Autowired
private EntityManagerFactory emf;
public GetEMF() {
if( emf == null )
System.out.println("Inner: EMF is null");
else
System.out.println("Inner: Got EMF instance");
}
}
當我運行代碼時,我得到這個輸出:
Top: Got EMF instance
Inner: EMF is null
從網上閱讀,我認為@PersistenceContext 注釋會填寫 emf,但事實并非如此。
我知道看起來我可以簡單地將 emf 的參考傳遞給 GetEMF 建構式,但這是簡單測驗用例的一個怪癖。它不適用于我的應用程式。我必須從環境中獲取 EntityManagerFactory。
uj5u.com熱心網友回復:
中的emf欄位GetEMF是null因為您自己創建了實體:
new GetEMF();
如果您希望 Spring 注入依賴項,例如注入到@Autowired欄位中,則該實體需要是 Spring 管理的 bean。
您可以使用注釋GetEMF,@Component然后將其自動連接到AutoWiredTest.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/439110.html
上一篇:Spring按相似功能查找
