什么是正确的注解,这样我才能获得 Autowired EntityManagerFactory?
What is the correct annotation so I can get Autowired EntityManagerFactory?
我需要在我的 Spring 引导应用程序中使用的 class 中获取一个自动装配的 EntityManagerFactory。我认为问题是因为我的 class 在一个单独的包中。
我生成了一个简单的示例案例来说明我正在尝试做什么。
这是应用class:
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 class:
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。
GetEMF
中的emf
字段是null
因为您自己创建了实例:
new GetEMF();
如果你想Spring注入依赖,例如注入@Autowired
字段,那么实例需要是一个由Spring管理的bean。
您可以使用 @Component
注释 GetEMF
,然后将其自动连接到 AutoWiredTest
。
我需要在我的 Spring 引导应用程序中使用的 class 中获取一个自动装配的 EntityManagerFactory。我认为问题是因为我的 class 在一个单独的包中。
我生成了一个简单的示例案例来说明我正在尝试做什么。
这是应用class:
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 class:
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。
GetEMF
中的emf
字段是null
因为您自己创建了实例:
new GetEMF();
如果你想Spring注入依赖,例如注入@Autowired
字段,那么实例需要是一个由Spring管理的bean。
您可以使用 @Component
注释 GetEMF
,然后将其自动连接到 AutoWiredTest
。