Java 在上下文初始化期间使用服务
我想在我的web应用程序中初始化一些代码。之前,我在我的一个豆子中使用它作为@PostConstruct,但我觉得它不太合适。 在我看来,在生命周期中初始化代码的位置是在servletcontext初始化之后 这就是为什么我写了这样一个listener类:Java 在上下文初始化期间使用服务,java,spring,servlets,autowired,servletcontextlistener,Java,Spring,Servlets,Autowired,Servletcontextlistener,我想在我的web应用程序中初始化一些代码。之前,我在我的一个豆子中使用它作为@PostConstruct,但我觉得它不太合适。 在我看来,在生命周期中初始化代码的位置是在servletcontext初始化之后 这就是为什么我写了这样一个listener类: public class MyServletContextListener implements ServletContextListener { @Autowired UserService userService;
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
现在,这不起作用,我想这是因为我不能在生命周期的早期自动连接我的服务。我无法手动构造新的修复和用户服务,因为这些类是抽象的。我应该将初始化代码移到其他地方吗?或者在生命周期的早期有什么方法可以做到这一点?有一个名为
ApplicationContextInitializer<ConfigurableApplicationContext>
尝试创建一个实现该接口的类,spring将知道initialize方法及其内容
将其添加到web.xml中
<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>class.to.the.interface.init.RuntimeEnvironmentInitializer</param-value>
</context-param>
上下文初始化类
class.to.the.interface.init.RuntimeEnvironmentInitializer
我使用InitliazingBean接口解决了这个问题我试着查找一下如何配置它,但是这个方法中的代码似乎没有运行。我需要在我的web.xml或其他文件中添加此侦听器吗?我应该提到我的web.xml org.springframework.web.context.ContextLoaderListener更新中有此侦听器。在我的响应中,您需要在web.xml中添加名为contextInitializerClasses的上下文参数,并指向实现接口的类。检查更新如果我这样做,服务仍然为空
<context-param>
<param-name>contextInitializerClasses</param-name>
<param-value>class.to.the.interface.init.RuntimeEnvironmentInitializer</param-value>
</context-param>