我想要创建一个bean,它可以由普通Java自动注入(自动注入),而不是使用Spring。
我的代码是:
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中,我只需要按照http://docs.spring.io/spring/docs/3.1.0.M1/spring-framework-reference/html/beans.html#beans-factory-class-static-factory-method准则定义bean
<bean id="client"
class="javax.ws.rs.client.ClientBuilder"
factory-method="createInstance"/>
@Autowired
会注射合适的豆子。
问题:我能在没有Spring的普通Java 中实现同样的目标吗?我可以用类似的方式定义bean吗?如果是,在哪里(在哪个配置文件中)?
发布于 2015-05-20 01:55:34
为此,您可以编写自己的CDI制作人。
@Dependent public ClientFactory{
@Produces Client createClient() {
return ClientBuilder.newClient();
}
}
现在您可以使用CDI的@Inject
在您的Bean中获取一个实例
@ApplicationScoped public class MyConnector {
@Inject private Client client;
}
有了这类生产者,CDI提供了工厂模式的一个易于使用的实现。您几乎可以在任何地方注入所有东西,不仅是类,还有接口、其他JEE资源,甚至原语类型。注入点不必是类成员,但也可能是方法中的参数.
每次注入都会给您一个不同的代理,因此如果有必要,您甚至可以向Bean注入多个客户端。如果这些代理对象引用相同的实例,则取决于工厂方法的实现,但通常不希望这样做。
https://stackoverflow.com/questions/30345414
复制相似问题