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

在普通Java EE中使用工厂方法定义bean-没有Spring

吕翰飞
2023-03-14

我的代码是这样的:

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;

@ApplicationScoped
public class MyConnector {
    ....
    private Client client = ClientBuilder.newClient();
    ....
}

我希望使用类似的依赖注入:

    @Inject
    private Client client;

在过去的Spring中,我只需按照以下准则定义bean:http://docs.Spring.io/Spring/docs/3.1.0.m1/spring-framework-reference/html/beans.html#beans-factory-class-statist-factory-method

<bean id="client"
    class="javax.ws.rs.client.ClientBuilder"
    factory-method="createInstance"/>

问题:我能在没有Spring的普通Java EE中以某种方式实现相同的功能吗?我可以用类似的方式定义bean吗?如果可以,在哪里(在哪个配置文件中)定义bean?

共有1个答案

林修真
2023-03-14

您可以为此编写自己的CDI生成器

@Dependent public ClientFactory{
   @Produces Client createClient() {
       return ClientBuilder.newClient(); 
   }
}

现在可以使用CDI的@inject在Bean中获取实例

@ApplicationScoped public class MyConnector {    
    @Inject private Client client;
}

有了这些生产者,CDI提供了工厂模式的易于使用的实现。您几乎可以在任何地方注入任何东西,不仅是类,还包括接口、其他JEE资源,甚至原始类型。注入点不必是类成员,也可以是方法中的参数。

 类似资料:
  • 将@Singleton直接应用于包含@PostConstruct和@Transactional的服务类按预期工作 - 调用@PostConstruct并且事务方法工作正常。 将bean定义移动到如下所示的@Factory中仍然有效,MyService singleton仍然被创建,但没有得到增强-@PostConstruct未被调用,事务方法将无法工作(无法获取当前线程的事务同步会话) 与Spri

  • 我是新泉。在Bean标记中,我发现了factory-method和factory-method和factory-bean之间有什么区别? 我正在使用factory-method调用我的getInstance静态方法来创建singleton对象。 工厂豆是用来做什么的? 对于给定的答复,我所理解的是 Factory-method用于调用静态方法在同一个bean类中创建对象。 Factory-bean

  • 问题内容: 我的应用程序有一个问题,当我登录时,该应用程序崩溃并且出现错误: 我试图弄乱gradle并更改变量。这个问题似乎源于此软件包: 然后,它还引用了以下内容: 这是我的摇篮 关于如何找到纠正错误的方法有任何想法吗? 问题答案: 尝试切换到Java 8兼容性,以对某些库进行适当的除糖处理: 此外,Google JSON API可能更需要。

  • Okie正在Spring 3.1.4上运行一些第三方代码,我无法更改。代码还使用在运行时动态注入类型。这种类型属于原型范围。所有这些都是基于服务对象创建的

  • 我正在实现一个工厂,一个负责跨应用程序管理令牌的类。我将在这个简化的示例之后解释我面临的问题: 最后是实现: 现在,在我们的中,我们要创建一个jWTTokenManager实例: TokenManager类型未定义方法aMethodNotDefinedInInterface()

  • 我发现了SpringData1.6.0的奇怪行为(降级的版本1.5.2没有这个问题)。这个版本似乎严格要求实体管理器工厂bean的id为“entityManagerFactory”。如果不是,则在运行TestNG测试时出现此错误: 引起原因:org.springframework.beans.factory.BeanCreation异常:创建名为'jpaMapppingContext'的bean时