【发布时间】:2015-09-06 18:59:12
【问题描述】:
所以我有一个服务,我通过一个创建代理的工厂实例化它,以便它可以处理我在服务上的一些注释。所以我的问题是……JavaEE 有没有办法让我的依赖注入通过工厂实例化所述服务的实例,而不是 EJB 通常由服务器实例化。
否则...是否有其他方法可以指示 Servlet 或 EJB 容器为我处理注释?就像一个螺栓可以有代码来处理带注释的类/方法/字段的反射分析?
很抱歉,如果这个问题难以理解,我很难弄清楚如何提问。下面是一个可以用来实例化服务的工厂示例(通过代理)。
package com.trinary.test.service;
import java.lang.reflect.Proxy;
import com.trinary.security.owasp.proxy.OWASPMethodValidatorProxy;
public class TestServiceFactory {
Class<?>[] interfaces = {TestService.class};
public TestService createESignService() throws IllegalArgumentException, InstantiationException, IllegalAccessException {
return (TestService)Proxy.newProxyInstance(
this.getClass().getClassLoader(),
interfaces,
new OWASPMethodValidatorProxy<TestService>(TestServiceImpl.class));
}
}
如果在 servlet 中我可以做这样的事情,我会喜欢它:
package com.trinary.test.servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.trinary.test.service.TestService;
public class TestServlet extends HttpServlet {
private static final long serialVersionUID = -1778574173539761350L;
@EJB protected TestService testService;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("PATH: " + req.getPathInfo());
// ...
resp.setContentType("text/html");
resp.getWriter().append("<html><h1>TESTY TEST!</h1></html>");
}
}
在上面您可以看到我如何将测试服务注入到我的 servlet 中。但是我希望 EJB 容器使用工厂来实例化 TestService 的新实例,而不是容器通常这样做。有没有办法做到这一点?
【问题讨论】:
-
最好添加一些代码 sn-p 以了解您的问题以及您实际想要实现的目标。
标签: java dependency-injection ejb java-ee-7