当前位置: 首页 > 知识库问答 >
问题:

非注射的焊接生产者方法-NPE

林彬
2023-03-14

我试图创建一个使用具有生产者方法的类的简单示例,目的是生产者方法注入依赖项,而不是Weld试图创建bean。这就是为什么我已经@VetoedDefaultEngine我还希望坚持@Default@any限定符

所以我有以下几点

发动机JAVA

public interface Engine
{
    void start();
    void stop();
}

默认引擎。JAVA

@Vetoed
public class DefaultEngine implements Engine
{

    public void start()
    {
        System.out.println("Cough cough vrummmmm");
    }

    public void stop()
    {
        System.out.println("Phhhut clank");
    }

}

汽车JAVA

public class Car
{
    @Inject
    private Engine engine;

    public void startCar()
    {
        engine.start();
    }

    public void stopCar()
    {
        engine.stop();
    }

}

一个pp.java

public class App 
{
    public static void main(@Observes ContainerInitialized event)
    {
        Car car = new Car();
        car.startCar();
        car.stopCar();
    }
}

引擎制造商。JAVA

public class EngineProducer
{

    @Produces
    public Engine getEngine()
    {
        return new DefaultEngine();
    }

}

我有beans.xml

<beans xmlns="http://java.sun.com/xml/ns/javaee" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
      http://java.sun.com/xml/ns/javaee/beans_1_1.xsd">
</beans>

但是当我收到以下信息时,引擎似乎没有被注入。

Exception in thread "main" java.lang.NullPointerException
    at com.test.testing.Car.startCar(Car.java:12)
    at com.test.testing.App.main(App.java:12)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:88)
    at org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:78)
    at org.jboss.weld.injection.MethodInvocationStrategy$SimpleMethodInvocationStrategy.invoke(MethodInvocationStrategy.java:129)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:308)
    at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:274)
    at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:264)
    at org.jboss.weld.event.ObserverNotifier.notifySyncObservers(ObserverNotifier.java:271)
    at org.jboss.weld.event.ObserverNotifier.notify(ObserverNotifier.java:260)
    at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:154)
    at org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:136)
    at org.jboss.weld.manager.BeanManagerImpl.fireEvent(BeanManagerImpl.java:673)
    at org.jboss.weld.environment.se.WeldContainer.initialize(WeldContainer.java:142)
    at org.jboss.weld.environment.se.Weld.initialize(Weld.java:544)
    at org.jboss.weld.environment.se.StartMain.go(StartMain.java:44)
    at org.jboss.weld.environment.se.StartMain.main(StartMain.java:53)

共有1个答案

浦思源
2023-03-14

OK找到了答案,Weld似乎无法管理用new创建的bean,也无法将bean实例注入容器事件的观察者。所以主要的应用程序。java必须转变为

public class App 
{
    @Inject
    private Car car;

    public void main(@Observes ContainerInitialized event)
    {
        car.startCar();
        car.stopCar();
    }
}
 类似资料:
  • 我试图在JavaSE中建立一个非常简单的weld实现。 我有扩展类: 然后,我有一个简单的类,我想注入: 最后,我想把它注入课堂: 结果是: 我希望在构造Test()时注入简单类,并调用postconstruct方法,该方法应输出预期文本。 我到底做错了什么?

  • 有一个简单的Mongo DB生产者连接到Mongo数据库 我的src/main/resources/meta-inf中的一个资源文件 WeldContext和WeldJUnit4Runner来自这里-http://memorynotfound.com/java-se-unit-testing-cdi-junit-jboss-weld-se/

  • kafka-python(1.0.0)在连接到代理时抛出错误。同时 /usr/bin/kafka-console-producer和 /usr/bin/kafka-console-consumer正常工作。 Python应用程序过去也运行良好,但是在动物园管理员重新启动后,它不再能够连接。 我使用文档中的裸露骨骼示例: 我收到这个错误: 单步通过( /usr/lib/python2.6/site-

  • 生产者方法对于以编程方式创建实例并在上下文中发布它们非常有用。问题是由创建并由生产者方法返回的实例的所有属性都不是由CDI注入的。在焊接留档中,我读到这是一种有意的行为,但在许多情况下,注入这些豆子会非常有用。 是否有一个变通方法来允许注入到这样的bean中?

  • 我有一个消费者作为生产者消费者模式的一部分: 简化: 如果我移除 通过将线程设置为睡眠,CPU使用率攀升到极高的水平(13%),而不是0%。 此外,如果我实例化该类的多个实例,则每个实例的CPU使用率都会以13%的增量攀升。 大约每分钟(可能每30秒)都会向BlockingCollection添加一个新的LogItem,并将适用的消息写入文件。 有没有可能线程以某种方式阻止了其他线程的运行,而系统

  • 我很难在独立的焊接容器中进行注射。它是在库代码中运行的,也可以在wildfly容器中运行。其他注射在焊接容器中工作,只是这个给我带来了麻烦。我已经尝试通过SeContainerInitializer专门添加类和接口。我试着创建一个工厂并使用生产方法。 类的注释(它是javax.inject.Singleton)。它有一个公共的无参数构造函数 连接 注射 焊接自举 当我尝试在weld-se实例中访问