这个技术是什么意思呢?
就是说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; @Stateless public class HelloEjb { @Inject private 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; @EJB private HelloEjb ejb; @Override protected 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