2017-06-02 53 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的靜態實例可以解決您的問題。 –