Я использую 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 создает объект и управляет его жизненным циклом.