我基于 Apache karaf osgi 和依赖注入的项目是通过蓝图文件完成的。我想知道这种豆子是否真的需要吸气剂和二传手。我在没有 getter 和 setter 方法的情况下对其进行了测试,它有效,但不确定这是否遵循最佳实践。我的动机只是从该文件中减少 LOC。
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"..>
.
.
<bean id="emailServiceImpl" class="com.mycompany.EmailServiceImpl">
<property name="applicationEnvironment" value="$(staging)" />
.
.
<bean id="orderDispatcherImpl" class="com.myCompany.OrderDispatcherImpl"
ext:field-injection="true" init-method="init">
<property name="emailService" ref="emailServiceImpl"/>
蓝图规范仅定义通过 JavaBeans 样式的 setter 方法注入属性。
字段注入是特定于 Karaf 中使用的蓝图的 Apache Aries 实现的扩展。因此,它不适用于其他蓝图实现。
如果您希望蓝图容器定义可以跨实现移植,那么最好使用 JavaBeans 样式的 setter 方法。如果你不关心这个,那么你可以使用字段注入,而忘记二传手方法。
但是,请注意,保留 setter 方法的另一个原因可能是出于单元测试目的。