Итак, у меня есть служба, которую я запускаю, создавая экземпляр через фабрику, которая создает прокси-сервер, чтобы обрабатывать некоторые аннотации, которые у меня есть на службе. Поэтому мой вопрос заключается в следующем: существует ли способ с JavaEE, чтобы моя инъекция зависимостей создавала экземпляры упомянутой службы через фабрику, а не EJB, как правило, создаются сервером.Instantiate EJB Via Factory
Иначе ... есть ли другой способ, которым я мог бы управлять контейнером 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));
}
}
Я хотел бы, если в сервлете я мог бы сделать что-то вроде этого:
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>");
}
}
В выше, вы можете увидеть, как я мог бы быть инъекционного тест службы в мой сервлет. Но я бы хотел, чтобы контейнер EJB создавал новые экземпляры TestService с использованием фабрики вместо того, что обычно делает контейнер. Есть ли способ сделать это?
Лучше добавить фрагмент кода, чтобы понять ваш вопрос n, чего вы на самом деле пытаетесь достичь. – OO7