Java 依赖注入不工作
我的限定词是:Java 依赖注入不工作,java,jakarta-ee,cdi,wildfly-10,Java,Jakarta Ee,Cdi,Wildfly 10,我的限定词是: @Qualifier @Target({ TYPE, METHOD, PARAMETER, FIELD }) @Retention(RUNTIME) @Documented public @interface JPADAOQ { } 这就是我要注射的豆子 @JPADAOQ @ApplicationScoped public class PlotDaoImpl extends JpaDao<Long, Plot> implements PlotDao { pu
@Qualifier
@Target({ TYPE, METHOD, PARAMETER, FIELD })
@Retention(RUNTIME)
@Documented
public @interface JPADAOQ {
}
这就是我要注射的豆子
@JPADAOQ
@ApplicationScoped
public class PlotDaoImpl extends JpaDao<Long, Plot> implements PlotDao {
public PlotDaoImpl() {
super(Plot.class);
}
}
但我总是把它设为空,所以我不能使用它
我的配置:1.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="all">
</beans>
2.pom.xml
基于wildfly快速启动表单
org.jboss.spec
jboss-javaee-7.0
${version.jboss.spec.javaee.7.0}
聚甲醛
进口
javax.enterprise
CDIAPI
假如
org.jboss.spec.javax.annotation
jboss-annotations-api_1.2_规范
假如
org.jboss.spec.javax.servlet
jboss-servlet-api_3.1_规范
假如
我不明白为什么我的bean没有注入int@PostConstruct方法。
@javax.faces.bean.ApplicationScoped
指定JSF托管bean是应用程序范围的,但必须注释为托管bean
@javax.enterprise.context.ApplicationScoped
是一个CDI故事。你必须以某种方式创造它。可能在PlotDaoImpl中添加一个方法,该方法用@products注释,返回this
@javax.faces.bean.ApplicationScoped
指定JSF托管bean是应用程序范围的,但必须注释为托管bean
@javax.enterprise.context.ApplicationScoped
是一个CDI故事。你必须以某种方式创造它。可能在PlotDaoImpl中添加一个方法,该方法带有@products注释,返回this
首先,我假设您的@ApplicationScoped
实际上是javax.enterprise.context.ApplicationScoped
。虽然如果不是像all
discovery模式那样,它不会造成任何伤害,但是发现模式仍然会将类作为bean来选择
其次,@ManagedBean
注释可以被删除,因为CDI将自动将类作为一个对象拾取
第三,在测试PlotController
时,确保您确实有一个活动会话。您必须让CDI为您创建PlotController
bean,以使注入工作
如果没有其他帮助,您可以尝试将
@SessionScoped
替换为@RequestScoped
,因为在bean可用性方面,行为可能略有不同,但这只是一个猜测。首先,我假设您的@ApplicationScoped
实际上是javax.enterprise.context.ApplicationScoped
。虽然如果不是像all
discovery模式那样,它不会造成任何伤害,但是发现模式仍然会将类作为bean来选择
其次,@ManagedBean
注释可以被删除,因为CDI将自动将类作为一个对象拾取
第三,在测试PlotController
时,确保您确实有一个活动会话。您必须让CDI为您创建PlotController
bean,以使注入工作
如果没有其他帮助,您可以尝试将@SessionScoped
替换为@RequestScoped
,因为在bean可用性方面,行为可能略有不同,但这只是一个猜测
<?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="all">
</beans>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.jboss.spec</groupId>
<artifactId>jboss-javaee-7.0</artifactId>
<version>${version.jboss.spec.javaee.7.0}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>javax.enterprise</groupId>
<artifactId>cdi-api</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.annotation</groupId>
<artifactId>jboss-annotations-api_1.2_spec</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.jboss.spec.javax.servlet</groupId>
<artifactId>jboss-servlet-api_3.1_spec</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>