首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在普通Java中使用工厂方法定义bean -没有Spring

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

Stack Overflow用户
提问于 2015-05-20 09:19:08
回答 1查看 1.5K关注 0票数 2

我想要创建一个bean,它可以由普通Java自动注入(自动注入),而不是使用Spring。

我的代码是:

代码语言:javascript
运行
复制
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;

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

我想使用这样的依赖注入来代替:

代码语言:javascript
运行
复制
    @Inject
    private Client client;

在好的旧Spring中,我只需要按照http://docs.spring.io/spring/docs/3.1.0.M1/spring-framework-reference/html/beans.html#beans-factory-class-static-factory-method准则定义bean

代码语言:javascript
运行
复制
<bean id="client"
    class="javax.ws.rs.client.ClientBuilder"
    factory-method="createInstance"/>

@Autowired会注射合适的豆子。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-20 09:55:34

为此,您可以编写自己的CDI制作人。

代码语言:javascript
运行
复制
@Dependent public ClientFactory{
   @Produces Client createClient() {
       return ClientBuilder.newClient(); 
   }
}

现在您可以使用CDI的@Inject在您的Bean中获取一个实例

代码语言:javascript
运行
复制
@ApplicationScoped public class MyConnector {    
    @Inject private Client client;
}

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

每次注入都会给您一个不同的代理,因此如果有必要,您甚至可以向Bean注入多个客户端。如果这些代理对象引用相同的实例,则取决于工厂方法的实现,但通常不希望这样做。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30345414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档