这个技术是什么意思呢?
就是说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