我有一些代码想要在我的网络应用程序中初始化。在我将它用作我的一个 bean 中的 @PostConstruct 之前,但它对我来说不太合适。 我认为生命周期中初始化代码的位置是在 servletcontext 初始化之后。
这就是为什么我编写了这样的监听器类:
public class MyServletContextListener implements ServletContextListener {
@Autowired
UserService userService;
@Autowired
RepairService repairService;
@Override
public void contextInitialized(ServletContextEvent sce) {
// Maak een gewone gebruiker
Address address1 = new Address("Bruul", "5", "2800", "Mechelen");
Person person1 = new Person("Jan", "Peeters", address1);
Client client1 = new Client(person1, "jan.peeters@student.kdg.be", "jan");
// Maak een gewone gebruiker
Address address2 = new Address("Zandstraat", "23", "3000", "Leuven");
Person person2 = new Person("Michel", "Van den Bergh", address2);
Client client2 = new Client(person2, "michel.vandenbergh@gmail.com", "michel");
// Maak een repairer
Address address3 = new Address("Nationalestraat", "5", "2000", "Antwerpen");
Person person3 = new Person("Wouter", "Deketelaere", address3);
Repairer repairGuy1 = new Repairer(person3, "wouter.deketelaere@kdg.be", "jef", "Master");
repairGuy1.rate(4);
// Maak een repairer
Address address4 = new Address("Kleuterstraat", "1", "2500", "Lier");
Person person4 = new Person("Handy", "Man", address4);
Repairer repairGuy2 = new Repairer(person4, "handy.man@handyman.com", "moeilijk", "Bachelor");
repairGuy2.rate(3);
// add users and update een gebruiker met een nieuw wachtwoord
try
{
userService.addUser(client1);
userService.addUser(client2);
userService.addUser(repairGuy1);
userService.addUser(repairGuy2);
userService.updatePassword(repairGuy1, "jef", "wouter");
userService.checkLogin(repairGuy1.getUsername(), "wouter");
}
// ommitted code
现在,这不起作用,我想这是因为我无法在生命周期的早期 Autowiring 我的服务。我无法手动构建新的修复和用户服务,因为这些类是抽象的。我应该将初始化代码移到其他地方吗?或者有没有办法在生命周期的早期做到这一点?
最佳答案
有一个名为
的接口(interface) ApplicationContextInitializer<ConfigurableApplicationContext>
您可以在 Spring 应用程序内的应用程序上下文启动期间使用它来初始化某些内容。
@Override
public void initialize(final ConfigurableApplicationContext appContext) {
this.configurableApplicationContext = appContext;
}
尝试创建一个实现该接口(interface)的类,spring 将了解初始化方法及其内容。
将其添加到 web.xml
<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>class.to.the.interface.init.RuntimeEnvironmentInitializer</param-value>
</context-param>
关于java - 在上下文初始化期间使用服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24892211/