我无法将Logger注入CDI bean。我从其他类似问题的答案中尝试了解决方案但没有任何帮助。如果你能帮助我找到这里发生的事情,我将非常感激。
我正在使用Glassfish 4.0。
尝试部署应用程序时来自Eclipse的错误消息:
deploy is failing=Error occurred during deployment: Exception while loading the app : CDI deployment failure:WELD-001408 Unsatisfied dependencies for type [Logger] with qualifiers [@Default] at injection point [[BackedAnnotatedField] @Inject protected learning.javaee.guestbook.UnregisteredUserPost.log]. Please see server.log for more details.
包含注入点的CDI bean:
package learning.javaee.guestbook;
import java.time.OffsetDateTime;
import java.util.logging.Logger;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.inject.Named;
@Named
@RequestScoped
public class UnregisteredUserPost extends AbstractPost {
private String name;
private OffsetDateTime dateTime;
@Inject
protected Logger log;
public UnregisteredUserPost() {}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public OffsetDateTime getDateTime() {
return dateTime;
}
public void setDateTime(OffsetDateTime dateTime) {
this.dateTime = dateTime;
}
public void save() {
log.info("TEST");
}
}
记录器制作人:
package learning.javaee.guestbook;
import javax.enterprise.inject.Produces;
import javax.enterprise.inject.spi.InjectionPoint;
import org.jboss.logging.Logger;
public class LoggerProducer {
@Produces
public Logger produceLogger(InjectionPoint ip) {
return Logger.getLogger(ip.getMember().getDeclaringClass().getName());
}
}
guestbook.xhtml - 调用正在使用Logger实例的CDI bean的方法save()
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://xmlns.jcp.org/jsf/html">
<h:head>
<title>#{msg.page_title}</title>
<link rel="stylesheet" type="text/css" href="css.css"/>
</h:head>
<h:body>
<h:form>
<h:outputText value="#{msg.your_name} "/>
<h:inputText value="#{unregisteredUserPost.name}"/>
<br/><br/>
<h:outputText value="#{msg.your_msg}"/>
<br/>
<h:inputTextarea
rows="5" cols="100" value="#{unregisteredUserPost.content}"/>
<br/><br/>
<h:commandButton
value="#{msg.submit}" action="#{unregisteredUserPost.save()}"/>
</h:form>
</h:body>
</html>
的WebContent \ WEB-INF \ 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"
version="1.1" bean-discovery-mode="all">
</beans>
答案 0 :(得分:2)
有时使生成器类@Dependent作用域使其工作。但我不确定。在你的情况下,你有“bean-discovery-mode = all”所以它不会产生任何不同。
但在你的情况下,你的进口有误。
您的制作人生成“导入组织。 jboss.logging .Logger;”并且注入的字段是java.util.logging
。记录器。所以你没有适合你想要注入的de type类的生产者。