我需要在Spring boot应用程序中使用的类中获得一个自动连接的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。
GetEMF
中的emf
字段为null
,因为您自己创建了实例:
new GetEMF();
如果您希望Spring注入依赖项,例如注入到自动连接的字段中,那么实例需要是Spring管理的bean。
您可以使用@Component
注释GetEMF
,然后将其自动连接到AutoWiredTest
中。
问题内容: 我已使用批注将其用于获取计算的属性。我需要的是那些用注解注解的字段/获取器应延迟加载。 这甚至有可能吗? 谢谢 问题答案: 是的。只需使用@Basic(fetch = FetchType.LAZY) 注释属性的字段/ 获取器,然后使用hibernate提供的此ant任务即可为实体类进行字节码检测。否则,将默默忽略该属性的LAZY加载。 该文档包含有关如何使用此ant任务进行字节码检测的
问题内容: 我想知道是否有一种方法可以指定在类方法之前调用方法。我知道这样的事情应该是可能的,因为JUnit具有before(),所以我想做的事情是相似的。 这是我想做的一个具体例子 基本上我想要一个注释在foo()之前告诉编译器或jvm调用init() 问题答案: 如果有的话,您可以使用此接口的实例和方法的内部包装,您可以自由检查方法是否带注释,并根据该方法执行一些操作: 或者,您可以尝试使用A
问题内容: 我正在创建一个小型Java Jpanel游戏,其中应该有一个火箭,它通过箭头上下移动,并通过太空射击。 触发方法应按以下方式工作:按下空格键,东西触发并在屏幕上移动,然后当它碰到某个x时,它就会消失。此外,您只能发射一次,直到另一颗子弹消失为止。 我不知道我在做什么错。首先,在我的代码启动后,您会看到子弹在屏幕上飞舞。 2,子弹没有消失。 第三,即使其他子弹仍然可见,它也允许我再次开火
问题内容: 我在看注释: 我对最后一部分感到困惑: 我不确定它是如何工作的,也不知道如何使用它。据我了解,Java 8下的任何内容都不允许在同一元素上重复注释。 有人可以澄清吗? 问题答案: 之所以存在NotEmpty.List,是为了避免无法对同一元素重复相同的注释。借助于NotEmpty.List,可以将多个NotEmpty批注有效地应用于一个元素。注释处理通过NotEmpty注释列表(即No
问题内容: 我正在编写一个具有静态外部“外壳”和动态内容部分的Web应用程序。用户浏览系统时,动态内容部分具有许多更新。加载新的内容块时,还可以选择加载另一个JavaScript文件。我以良好的内务管理名义,从DOM中删除了适用于旧内容块的脚本块,因为不再需要JavaScript。 接下来是问题,当我意识到尽管我已经从DOM中删除了该元素,但是先前评估过的JavaScript仍然可以执行。这当然是
我尝试获取指纹值并存储它。在那之后,我试着比较一下 指纹的价值来自另一个硬件,指纹 传感器。 问题1。能比较一下吗? 问题2。如果可能,我如何获得该值? 我搜索了这些问题,发现这是不可能的。但我觉得 获取指纹信息的方法是存在的。我想要一个明确的答案。很抱歉 没有上传任何代码,我已经尽我所能搜索了。