Tomcat 9.x + сварка - использование точки инжекции для конструктора - PullRequest
0 голосов
/ 01 января 2019

Я использую Tomcat 9.x и Weld 3.x.Точки впрыска для поля и для сеттера работают нормально.

  <dependencies>

    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>8.0</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>javax.enterprise</groupId>
      <artifactId>cdi-api</artifactId>
      <version>2.0.SP1</version>
      <scope>provided</scope>
    </dependency>


    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>4.0.1</version>
      <scope>provided</scope>
    </dependency>

    <!--<dependency>-->
      <!--<groupId>org.jboss.weld.servlet</groupId>-->
      <!--<artifactId>weld-servlet</artifactId>-->
      <!--<version>2.4.8.Final</version>-->
    <!--</dependency>-->
<dependency>
         <groupId>org.jboss.weld.servlet</groupId>
         <artifactId>weld-servlet-shaded</artifactId>
         <version>3.0.5.Final</version>
       </dependency>

  </dependencies>

Этот управляемый компонент

@RequestScoped
public class Student {

    private String name;

    public Student() {
        this.name = "Ivan";
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

этот сервлет

@WebServlet("/index.html")
public class HelloServlet extends HttpServlet {

    @Inject
    Student student;

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        request.setCharacterEncoding("UTF-8");
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html");

        PrintWriter writer = response.getWriter();

        student.setName("Alex");

        writer.println("<h2>");
        writer.println("Hello " + this.student.getName() + " !");
        writer.println("</h2>");
        writer.println("</br>" + "</br>");
    }
}

this.beans.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans
        xmlns="http://xmlns.jcp.org/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
        bean-discovery-mode="annotated">
</beans>

Я пытался найтибиблиотека Weld, но в основном для сервлетов я нашел 2, которые работают.Но точка ввода для конструктора не работает.Может кто-нибудь объяснить, в чем проблема?У кого есть идеи?

Вот использование констуртора в точке впрыска

@WebServlet( "/index.html" )
public class HelloServlet extends HttpServlet {

    public static String URI = "/beanExample.jsp";


    Student student;

    @Inject
    public HelloServlet() {
        this.student = student;
    }


    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        setCharacter(request, response);

        PrintWriter writer = response.getWriter();

      student.setName("Alex");
        writer.println("<h2>");
        writer.println("Hello " + this.student.getName() + " !");
        writer.println("</h2>");
        writer.println("</br>" + "</br>");

    }

Точка впрыска - это точка, отмеченная аннотацией @ Точка ввода. На этом этапе контейнер CDI создает объект и управляет его жизненным циклом.

...