使用Servlet 3.0,Redis / Jedis和CDI的简单CRUD –第2部分
在本文中,我們將重點(diǎn)介紹CDI和Servlet 3.0。 您可以在此處看到第1部分。
讓我們從CDI開始。
當(dāng)我開始撰寫源自該系列的文章時(shí),我并沒有考慮撰寫CDI。 真誠地說,我以前從未使用過。 這篇文章的想法是使用jedis和servlet創(chuàng)建一個(gè)對象。 但是,當(dāng)我編寫應(yīng)用程序時(shí),我只是討厭實(shí)例化bean的想法。 在我的日常工作中,我使用Spring進(jìn)行依賴項(xiàng)注入和其他操作,但是對于此帖子,我不想添加。 因此,我決定嘗試CDI,而在應(yīng)用程序中添加和使用它的簡單性讓我感到非常驚訝。
那么,什么是CDI?
CDI是上下文和依賴注入的首字母縮寫,是在javaee平臺(tái)上解決DI的javaee規(guī)范。 因此,一旦在項(xiàng)目中將其激活,就可以使用@Inject批注輕松注入依賴項(xiàng)。 在CDI上,一切都是豆子,
并且?guī)缀跛械念惗伎梢宰⑷搿?
如何激活CDI?
如果我們在Java EE應(yīng)用程序服務(wù)器中運(yùn)行應(yīng)用程序,則只需在META-INF文件夾中添加一個(gè)空的beans.xml。 但是在諸如tomcat之類的服務(wù)器中,我們需要添加更多文件和配置:
之后,我們準(zhǔn)備開始使用CDI進(jìn)行編碼。
在上一篇文章中,我們創(chuàng)建了一個(gè)UserDAO類,在這些方法中,我們使用Jedis類的實(shí)例執(zhí)行Redis命令。 使用@Inject批注將該實(shí)例注入到UserDAO對象中。 我們可以在下面看到:
public class UserDAO {@Inject Jedis jedis;//.... }如我們所見,注入Jedis類的實(shí)例非常簡單。 如果Jedis類具有不帶參數(shù)的構(gòu)造函數(shù),則將其直接注入。 但事實(shí)并非如此,因此我們使用了帶有@Produces注釋方法的類。 這表明這是生產(chǎn)者方法。 在我們的示例中,我們還使用了JedisPool,從中可以獲取Jedis連接。 在這種情況下,我們有兩個(gè)生產(chǎn)者:
Jedis生產(chǎn)者有一個(gè)通過@Inject注入的JedisPool實(shí)例,我們可以在下面看到它們:
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實(shí)例的生產(chǎn)者。 在這段代碼中,我們還看到了另外兩個(gè)注釋。
現(xiàn)在我們可以看到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實(shí)例,該類需要一個(gè)JedisPool實(shí)例。 JedisPool是通過@Inject注入的,它是由我們在上一個(gè)代碼中看到的producer方法創(chuàng)建的。 它還有一個(gè)@Disposes ,它僅將連接返回到Pool。
因此,通過這種方式,我們可以將Jedis實(shí)例注入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; //... }在此示例中,我們可以看到在應(yīng)用程序中添加和使用CDI有多么簡單。
Servlet 3.0
我們在新servlet上的主要區(qū)別在于我們不需要在web.xml中聲明它們,現(xiàn)在我們可以簡單地通過使用注釋來設(shè)置servlet設(shè)置。 在示例中構(gòu)建的servlet中,我們使用了注釋來設(shè)置servlet的url映射。 以前已經(jīng)開發(fā)過servlet的人都知道這是我們需要在web.xml上添加的配置之一。 我們可以在下面的servlet中看到它:
@WebServlet("/UserController") public class UserController extends HttpServlet {private static final long serialVersionUID = 1L;@Inject UserService userService; //...//.. doGet //.. doPost}在上面的代碼中,我們說的是servlet將響應(yīng)/ UserController路徑。 使用此注釋,我們可以添加更多配置,例如:
@WebServlet(value="/UserController", name="userServlet")在上面的代碼中,我們聲明了映射和servlet名稱。 還有其他注釋可以簡化servlet api的使用,例如@ WebInitParam,@ WebListener和@WebFilter 。 我們不會(huì)談?wù)撍鼈?#xff0c;但是您可以找到關(guān)于它們的大量資源。 另外,由于Servlet 3.0,因此支持異步處理。
今天就這樣。 歡迎任何意見或建議。
- 您可以在此處找到源代碼。
翻譯自: https://www.javacodegeeks.com/2013/11/simple-crud-using-servlet-3-0-redisjedis-and-cdi-part-2.html
總結(jié)
以上是生活随笔為你收集整理的使用Servlet 3.0,Redis / Jedis和CDI的简单CRUD –第2部分的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓清除数据要输入密码(安卓清除数据)
- 下一篇: 查看linux的编码方式(查看linux