您可以创建一个
DemoApplicationContextInitializer类,以将
appliationContext引用存储在主类的静态属性中。
public class DemoApplicationContextInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> { @Override public void initialize(ConfigurableApplicationContext ac) { Application.context = ac; }}@SpringBootApplicationpublic class Application { public static ApplicationContext context; public static void main(String[] args) throws Exception { new SpringApplicationBuilder(Application.class) .initializers(new DemoApplicationContextInitializer()) .run(args); }}然后,您可以在实体侦听器中访问上下文
public class PackageListener{ //@Autowired Encryptor encryptor; @PrePersist public void preSave(final Package pack){ encryptor = Application.context.getBean(Encryptor.class); pack.setBic(encryptor.encrypt(pack.getBic())); }}为了使它在您的junit测试中起作用,只需在测试中添加初始化程序就可以了……
@RunWith(SpringRunner.class)@SpringBootTest(webEnvironment=WebEnvironment.RANDOM_PORT, classes = Application.class)@ContextConfiguration(classes = Application.class, initializers = DemoApplicationContextInitializer.class)public class MyTest {...}在我的环境中,它可以正常工作。希望对您也有帮助。



