我想创建一个可以通过普通Java EE自动注入(自动装配)的bean,不是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;
定义bean
<bean id="client"
class="javax.ws.rs.client.ClientBuilder"
factory-method="createInstance"/>
并且@Autowired
将注入正确的bean。
问题:我可以在没有Spring的普通Java EE 中以某种方式实现相同的目标吗?我可以用类似的方式定义bean - 如果是这样,在哪里(在哪个配置文件中)?
答案 0 :(得分:1)
您可以为此目的编写自己的CDI制作人
@Dependent public ClientFactory{
@Produces Client createClient() {
return ClientBuilder.newClient();
}
}
现在您可以使用CDI的@Inject
来获取Bean中的实例
@ApplicationScoped public class MyConnector {
@Inject private Client client;
}
通过这些生产者,CDI提供了一种易于使用的工厂模式实现。您几乎能够注入所有内容,不仅包括类,还包括接口,其他JEE资源甚至原始类型。注射点不必是类成员,但也可以是例如方法中的一个参数......
每次注入都会为您提供不同的代理,因此如果必须,您可以向Bean注入多个客户端。如果那些Proxy对象引用相同的实例取决于您的工厂方法的实现,但通常您不希望这样。