在本文中,我们将重点介绍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之类的服务器中,我们需要添加更多文件和配置:

  1. 在lib文件夹中添加weld-servlet.jar。 您可以从Weld网站获取它;
  2. 在META-INF下创建一个文件context.xml:
    <?xml version="1.0" encoding="UTF-8"?>
    <Context>
    <Manager pathname=""/> <!-- disables storage of sessions across restarts -->
    <Resource name="BeanManager"
    auth="Container"
    type="javax.enterprise.inject.spi.BeanManager"
    factory="org.jboss.weld.resources.ManagerObjectFactory"/>
    </Context>
  3. 在web.xml上添加一些焊接配置:
    <listener><listener-class>org.jboss.weld.environment.servlet.Listener</listener-class></listener><resource-env-ref><resource-env-ref-name>BeanManager</resource-env-ref-name><resource-env-ref-type>javax.enterprise.inject.spi.BeanManager</resource-env-ref-type></resource-env-ref>
  4. 然后,我们只需要在META-INF或WEB-INF上添加一个空的beans.xml。

之后,我们准备开始使用CDI进行编码。

在上一篇文章中,我们创建了一个UserDAO类,在这些方法中,我们使用Jedis类的实例执行Redis命令。 使用@Inject批注将该实例注入到UserDAO对象中。 我们可以在下面看到:

public class UserDAO {@Inject Jedis jedis;//....
}

如我们所见,注入Jedis类的实例非常简单。 如果Jedis类具有不带参数的构造函数,则将其直接注入。 但事实并非如此,因此我们使用了带有@Produces注释方法的类。 这表明这是生产者方法。 在我们的示例中,我们还使用了JedisPool,从中可以获取Jedis连接。 在这种情况下,我们有两个生产者:

  1. 对于JedisPool
  2. 其他用于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实例的生产者。 在这段代码中,我们还看到了另外两个注释。

  1. @Singleton –说返回的实例是一个单例,这意味着将只有一个此类的实例;
  2. @Disposes –指示销毁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,因此支持异步处理。

今天就这样。 欢迎任何意见或建议。

  • 您可以在此处找到源代码。
参考: 使用Servlet 3.0,Redis / Jedis和CDI的简单CRUD –第2部分,来自XICO JUNIOR'S WEBLOG博客的JCG合作伙伴 Francisco Ribeiro Junior。

翻译自: 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部分相关推荐

  1. 使用Servlet 3.0,Redis / Jedis和CDI的简单CRUD –第1部分

    在这篇文章中,我们将构建一个简单的用户界面. 数据将存储在Redis中. 为了与Redis交互,我们将使用Jedis库. CDI用于Depedency Injection,而Servlet 3.0用于 ...

  2. Redis实战之征服 Redis + Jedis + Spring (三)

    一开始以为Spring下操作哈希表,列表,真就是那么土.恍惚间发现"stringRedisTemplate.opsForList()"的强大,抓紧时间恶补下. 通过spring-d ...

  3. Servlet 3.0概述

    Servlet 3.0 –具有许多突破性的功能,这些功能最终将改变开发人员编写和编写JEE Web应用程序的方式–有人可能会说,它的约定违背了我们对事物在理论上"应该"如何工作的大 ...

  4. Redis Jedis

    相信大家有着同样的问题,Jedis是什么呢?下面为你详细解答关于Redis Jedis的内容. Jedis到底是什么? 在常见命令中,使用各种Redis自带客户端的命令行方式访问Redis服务. 而在 ...

  5. 征服 Redis + Jedis + Spring (一)—— 配置常规操作(GET SET DEL)

    有日子没写博客了,真的是忙得要疯掉. 完成项目基础架构搭建工作,解决了核心技术问题,接着需要快速的调研下基于Spring框架下的Redis操作. 相关链接: 征服 Redis 征服 Redis + J ...

  6. Springboot整合redis+jedis

    Spring Boot整合Redis+Jedis 1)在pom.xml添加Redis依赖Jedis依赖和,示例代码如下 <!-- <version>2.1.5.RELEASE< ...

  7. Redis实战之Redis + Jedis

    用Memcached,对于缓存对象大小有要求,单个对象不得大于1MB,且不支持复杂的数据类型,譬如SET 等.基于这些限制,有必要考虑Redis! 相关链接: Redis实战 Redis实战之Redi ...

  8. Servlet 3.0 新特性概述

    Servlet 3.0 新特性概述 Servlet 3.0 作为 Java EE 6 规范体系中一员,随着 Java EE 6 规范一起发布.该版本在前一版本(Servlet 2.5)的基础上提供了若 ...

  9. Servlet 2.0 Servlet 3.0 新特性

    概念:透传. Callback 在异步线程中是如何使用的.?? Servlet 2.0 && Servlet 3.0 新特性 Servlet 2.0 && Servle ...

最新文章

  1. JavaScript初学者编程题(11)
  2. The PNP sensor:- This is a sensor who...
  3. 如何在代码中让按钮高亮_如何在C代码中插入移位寄存器
  4. 什么是路由器交换机?路由器交换机介绍!
  5. Flex+BlazeDS+IntelliJ IDEA整合开发系列一之起步demo
  6. linux 进程自重启,linux 进程监控和自动重启的简单实现
  7. 03-15 截图、日志与录屏
  8. java切面不需要接口了吗_详解Spring AOP 实现“切面式”valid校验
  9. Spinnaker:云原生多云环境持续部署的未来
  10. “搏一搏,单车变摩托!”华为天才少年耗时四个月,将自行车强势升级为自动驾驶...
  11. CAD计算机辅助设计——文件管理和界面设置
  12. mysql-connector-java-8.0.26.jar MySQLJDBC下载
  13. Python Django开发的WebSSH 堡垒机
  14. 逆radon变换matlab,Radon变换及其Matlab代码实现
  15. matlab求状态方程的解,利用matlab求解系统的状态方程
  16. operator的理解
  17. mc服务器文件夹改皮肤,我的世界皮肤替换教程 老司机教你更换皮肤
  18. session活化与钝化
  19. 通过js实现金字塔(星号金字塔,回文对称数字金字塔)
  20. C语言 字节数组转为字符串

热门文章

  1. java 时分秒格式小时8_Java里得到00:00:00格式的时分秒的Timestamp
  2. internet地址java表示
  3. java_basic_review(5) java继承
  4. 单件模式(单例模式)
  5. Spring boot(六):如何优雅的使用mybatis
  6. java 读取 文本块_Java文本块
  7. java 栈 队列 接口_Java队列接口
  8. vaadin_Vaadin提示:以声明方式构建UI
  9. kafka streams_Kafka REST Proxy MapR Streams入门
  10. web服务优化与健壮性改进_创建健壮的微服务架构所涉及的组件