java - 在上下文初始化期间使用服务

标签 java spring servlets autowired servletcontextlistener

我有一些代码想要在我的网络应用程序中初始化。在我将它用作我的一个 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/

相关文章:

java - 序列化 Integer 对象的大规模处理

java - 方法不适用于参数

SpringJUnit4ClassRunner 加上 Log4j2 加上类路径外的 log4j2.xml

java - 如何使用 Spring RabbitMQ MessageListener 获取 MessageProperties

java - java方法应该有多少个标准参数?

java - 查询 firebase 数据库并检索有限的数据

spring - Spring注解@Controller和@Service一样吗?

java - 告诉 servlet 文件位置的正确方法是什么?

image - 如何使用 JSP -Servlet 和 EJB 3.0 上传图像

java - 在 IIS 7 上安装 Coldfusion 11 并在尝试运行 servlet 时看到错误 404.0