在以下代码中:
import jakarta.enterprise.inject.se.SeContainer;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import jakarta.enterprise.inject.se.SeContainerInitializer;
import java.util.HashMap;
import java.util.Map;
public class OrderRepositoryTest {
private static EntityManager entityManager;
@BeforeAll
public static void init() {
Map<String, String> configOverrides = new HashMap<>();
configOverrides.put("jakarta.persistence.validation.mode", "none");
EntityManagerFactory emFactory = Persistence.createEntityManagerFactory("primary-test", configOverrides);
entityManager = emFactory.createEntityManager();
}
@Test
public void test() {
SeContainerInitializer init = SeContainerInitializer.newInstance();
init.addBeanClasses(OrderRepository.class);
SeContainer c = init.initialize();
OrderRepository sut = c.select(OrderRepository.class).get();
}
}
准备好的静态
EntityManager
实例计划成为OrderRepository
的依赖,这意味着OrderRepository
有一个@Inject private EntityManager
字段。显然此时EntityManager
实例还没有注入到SeContainer
中,运行这段代码会导致错误:
org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type EntityManager with qualifiers @Default
问题:如何将准备好的
EntityManager
实例注入SeContainer
,然后最终注入OrderRepository
?