CDI进阶第七步 注入内置对象

来源:互联网 发布:lambda python java 编辑:程序博客网 时间:2024/04/29 10:37

这个技术是什么意思呢?

就是说CDI可以注入一些容器自带的东西。比如强大的HttpServletRequest.

试想一下,如果CDI不能注入系统自带的资源,比如JPA持久化上下文,那么CDI技术有何意义?现在的web项目大都是要操作数据库的。

但是JPA的持久化上下文,它本身是用JNDI进行管理的。

我先写个EJB自动注入HttpServletRequest的例子。至于CDI的例子也一样。

package cdibeans; import javax.ejb.Stateless;import javax.inject.Inject;import javax.servlet.http.HttpServletRequest; @Statelesspublic class HelloEjb { @Injectprivate HttpServletRequest request;public void hello(){request.setAttribute("greeting", "hello world!");}}

接下来就是servlet的代码

package cdibeans; import java.io.IOException; import javax.ejb.EJB;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; @WebServlet("/hello.html")public class HelloServlet extends HttpServlet {private static final long serialVersionUID = 1L;@EJBprivate HelloEjb ejb;@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {ejb.hello();req.getRequestDispatcher("/hello.jsp").forward(req, resp);;}}
附带jsp的代码

<html><body>==${greeting}==</body></html>

浏览器访问效果。

 

那么除了request,还可以注入什么?

HttpSession

ServletContext

可以使用@Resource注解,采用JNDI方式注入的有:

UserTransaction

Principal

Validator

ValidatorFactory

0 0
原创粉丝点击