使用Servlet 3.0,Redis / Jedis和CDI的简单CRUD –第2部分
在本文中,我們將重點介紹CDI和Servlet 3.0。 您可以在此處看到第1部分。
讓我們從CDI開始。
當我開始撰寫源自該系列的文章時,我并沒有考慮撰寫CDI。 真誠地說,我以前從未使用過。 這篇文章的想法是使用jedis和servlet創建一個對象。 但是,當我編寫應用程序時,我只是討厭實例化bean的想法。 在我的日常工作中,我使用Spring進行依賴項注入和其他操作,但是對于此帖子,我不想添加。 因此,我決定嘗試CDI,而在應用程序中添加和使用它的簡單性讓我感到非常驚訝。
那么,什么是CDI?
CDI是上下文和依賴注入的首字母縮寫,是在javaee平臺上解決DI的javaee規范。 因此,一旦在項目中將其激活,就可以使用@Inject批注輕松注入依賴項。 在CDI上,一切都是豆子,
并且幾乎所有的類都可以注入。
如何激活CDI?
如果我們在Java EE應用程序服務器中運行應用程序,則只需在META-INF文件夾中添加一個空的beans.xml。 但是在諸如tomcat之類的服務器中,我們需要添加更多文件和配置:
之后,我們準備開始使用CDI進行編碼。
在上一篇文章中,我們創建了一個UserDAO類,在這些方法中,我們使用Jedis類的實例執行Redis命令。 使用@Inject批注將該實例注入到UserDAO對象中。 我們可以在下面看到:
public class UserDAO {@Inject Jedis jedis;//.... }如我們所見,注入Jedis類的實例非常簡單。 如果Jedis類具有不帶參數的構造函數,則將其直接注入。 但事實并非如此,因此我們使用了帶有@Produces注釋方法的類。 這表明這是生產者方法。 在我們的示例中,我們還使用了JedisPool,從中可以獲取Jedis連接。 在這種情況下,我們有兩個生產者:
Jedis生產者有一個通過@Inject注入的JedisPool實例,我們可以在下面看到它們:
JedisPoolFactory:
public class JedisPoolFactory {private String host = "localhost";private JedisPool jedisPool;@Singletonpublic @Produces JedisPool getJedisPool(){jedisPool = new JedisPool(new JedisPoolConfig(), host);return jedisPool;}public void detroy(@Disposes JedisPool jedisPool){jedisPool.destroy();} }在代碼中,我們看到方法getJedisPool帶有@Produces注釋,表示它是JedisPool實例的生產者。 在這段代碼中,我們還看到了另外兩個注釋。
現在我們可以看到JedisConnectionFactory :
public class JedisConnectionFactory {@Injectprivate JedisPool jedisPool;@Produces public Jedis getJedis(){return jedisPool.getResource();}public void returnResource(@Disposes Jedis jedis){System.out.println("Returning jedis Connection");jedisPool.returnResource(jedis);}}要獲取Jedis實例,該類需要一個JedisPool實例。 JedisPool是通過@Inject注入的,它是由我們在上一個代碼中看到的producer方法創建的。 它還有一個@Disposes ,它僅將連接返回到Pool。
因此,通過這種方式,我們可以將Jedis實例注入DAO。 然后在其他類中,我們僅使用@Inject ,就像在Service和Servlet類中看到的那樣:
//UserService @RequestScoped public class UserService {@InjectUserDAO userDAO; //... }//Servlet - UserController public class UserController extends HttpServlet {private static final long serialVersionUID = 1L;@Inject UserService userService; //... }在此示例中,我們可以看到在應用程序中添加和使用CDI有多么簡單。
Servlet 3.0
我們在新servlet上的主要區別在于我們不需要在web.xml中聲明它們,現在我們可以簡單地通過使用注釋來設置servlet設置。 在示例中構建的servlet中,我們使用了注釋來設置servlet的url映射。 以前已經開發過servlet的人都知道這是我們需要在web.xml上添加的配置之一。 我們可以在下面的servlet中看到它:
@WebServlet("/UserController") public class UserController extends HttpServlet {private static final long serialVersionUID = 1L;@Inject UserService userService; //...//.. doGet //.. doPost}在上面的代碼中,我們說的是servlet將響應/ UserController路徑。 使用此注釋,我們可以添加更多配置,例如:
@WebServlet(value="/UserController", name="userServlet")在上面的代碼中,我們聲明了映射和servlet名稱。 還有其他注釋可以簡化servlet api的使用,例如@ WebInitParam,@ WebListener和@WebFilter 。 我們不會談論它們,但是您可以找到關于它們的大量資源。 另外,由于Servlet 3.0,因此支持異步處理。
今天就這樣。 歡迎任何意見或建議。
- 您可以在此處找到源代碼。
翻譯自: https://www.javacodegeeks.com/2013/11/simple-crud-using-servlet-3-0-redisjedis-and-cdi-part-2.html
總結
以上是生活随笔為你收集整理的使用Servlet 3.0,Redis / Jedis和CDI的简单CRUD –第2部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓清除数据要输入密码(安卓清除数据)
- 下一篇: 使用Servlet 3.0,Redis