Autofac是.net的Inversion of Control容器。它具有吸引力(对我而言)的特点:
当Autofac实例化组件时,它满足组件的要求 通过查找和实例化其他组件来实现依赖关系。
组件将其与Autofac的依赖关系表达为构造函数 参数:
public class TaskController : IController { public TaskController(ITaskRepository tasks) { ... } }
在这种情况下,Autofac将寻找另一个提供该组件的组件
ITaskRepository
服务并调用TaskController
的构造函数 将该组件作为参数。
(来源:http://code.google.com/p/autofac/)
对于给定接口的单个实现的最简单情况,这可以很好地工作 - 不需要任何关于依赖项的元数据(属性/ XML / config类)。
Java的“Spring DI”容器是否支持相同的功能?
答案 0 :(得分:1)
我正在寻找DI容器从中推断出这些信息 字节码而不是我必须用XML提供它。
我不相信Spring有这样的功能。如果你可以像这样注释你的构造函数
@Autowired
public TaskController(ITaskRepository tasks) { ... }
并且只有一个bean在上下文中实现ITaskRepository
,然后Spring可以解决它,但是你需要注释。
如果我误解了你的问题,请纠正我。
如果您无法控制类添加注释,则仍可以使用<bean>
<constructor-arg>
元素在调用构造函数时引用并使用另一个bean。
<bean id="taskRepository" class="com.some.TaskRepositoryImpl" />
<bean id="taskController" class="com.some.TaskController">
<constructor-arg ref="taskRepository" />
</bean>
或者,使用Java配置
@Bean
public ITaskRepository taskRepository() {
return new TaskRepositoryImpl();
}
@Bean
public TaskController taskController() {
return new TaskController(taskRepository());
}