我正在读这本书, Pro JPA2:掌握Java Persistance API ,我没有像本例中那样获得类级别注释的用处:
@EJB(name="cart", beanInterface=ShoppingCart.class)
public class ShoppingCartServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession(true);
ShoppingCart cart = (ShoppingCart) session.getAttribute("cart");
//......
}
}
如果不会在那里自动注入cart变量的值并且你必须初始化var,那么放置@EJB是什么意思。自己呢?代码不会像注释一样工作吗?注释实际上做了什么?
我得到了其他类型注释的用处,比如当你把它放在方法或变量上时,它会自动注入东西。就在这里,在班级,它看起来毫无用处。
答案 0 :(得分:4)
类级别@EJB(或@Resource)定义您的ShoppingCartServlet依赖于某些EJB,在您的情况下为“cart”。如果要从非托管上下文(如POJO)访问EJB,则需要这样做。在这种情况下,您必须进行JNDI查找才能获得对EJB的引用,您可以使用ejb-ref(ejb-local-ref)描述符或类级别@EJB注释来定义EJB。
答案 1 :(得分:-1)
这看起来像是类级别的注释而不是方法级别,我不知道为什么会想要将servlet注释为EJB,但正确使用@EJB注释会为该类提供许多不同的东西,免费,如交易等......