2017-06-02 56 views
1

我有两个servlet,并且都使用相同的对象来处理数据库。但使用构造函数或设置器注入引用不可能的对象。帮我请,如何做到这一点在我的情况:如何在类servlet中进行依赖关系注入?

第一个servlet:

public class AddUserServlet extends HttpServlet { 

    private DBJointPool db; // Как передать этот объект в класс? 

    @Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 

     db.somethingToDoWithDatabaseConnectionPool(); 

    } 
} 

第二个servlet:

public class DeleteUserServlet extends HttpServlet { 

    private DBJointPool db; // Как передать этот объект в класс? 

    @Override 
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 

     db.somethingToDoWithDatabaseConnectionPool(); 

    } 
} 

我使用JDBC驱动程序,而不框架。

+1

假设你引用这个[示例](http://www.journaldev.com/1997/servlet-jdbc-database-connection-example),它解释了你的问题的一个很好的解决方案。 –

+2

你有没有使用框架的具体原因? – chrylis

回答

1

如果spring-boot包含在你的项目,这里将是您的要求的解决方案:

@Bean 
public ServletRegistrationBean addUserServlet(DBJointPool db) { 
    // suppose there is a constructor for your servlet 
    final ServletRegistrationBean servlet = new ServletRegistrationBean(new AddUserServlet(db)); 
    servlet.setName("addUserServlet"); 
    servlet.setUrlMappings(Collections.singletonList("/addUser.*")); 
    return servlet; 
} 

和揭露DeleteUserServlet如下:

@Bean 
public ServletRegistrationBean deleteUserServlet(DBJointPool db) { 
    // suppose there is a constructor for your servlet 
    final ServletRegistrationBean servlet = new ServletRegistrationBean(new DeleteUserServlet(db)); 
    servlet.setName("deleteUserServlet"); 
    servlet.setUrlMappings(Collections.singletonList("/deleteUser.*")); 
    return servlet; 
} 

当然,你不得不暴露DBJointPool某处否则,例如:

@Bean 
public DBJointPool dBJointPool() { 
    return new DBJointPool(); 
} 

但是,如果您不使用spring-boot,但spring框架可以接受,那么在应用程序上下文中配置这些bean xml文件也可以。

最后,如果spring是不可接受的,请考虑单身人士,如static成员为这些实例。

请让我知道是否有问题。

+0

谢谢,我不使用Spring。对不起,我忘了写在我的问题。 Spring是我学习Java的下一章。不要删除你的答案,我认为这是未来的好例子。 – Pavel

+1

然后,这些bean的静态实例可以解决您的问题。 –