用Java实现的IoC容器中,最重要的一个功能是称作依赖注入的机制。IoC的基本想法是将对象的创建和管理从代码中剥离,并将控制放到IoC框架手中。在一个面向接口编程的应用程序中使用依赖注入,你创建的组件可以不与任何特定的接口实现绑定。你的程序也针对接口编程并通过配置Plexus来将正确的实现连接到正确的组件。虽然你的代码都是与接口打交道,但你仍然可以通过一个定义组件的XML文件来获得类和组件相互依赖的信息。换句话说,你可以编写独立的组件,然后你可以通过一个XML文件来定义组件应当如何被装配在一起。在Plexus的情形中,定义系统组件的XML文档位于META-INF/plexus/components.xml
。
在一个Java IoC容器中,有很多中方法将依赖值注入到一个组件对象中:构造器,set方法,或者字段注入。虽然Plexus提供全部这三种依赖注入技术,Maven只使用其中的两种:字段注入和set方法注入。
- 构造器注入
-
构造器注入是指当对象实例被创建的时候,通过对象的构造方法填入对象的值。例如,如果你有类对象
Person
,其构造方法是Person(String name, Job job)
,你就可以通过该构造器传入name
和job
的值。 - set方法注入
-
set方法注入是指使用Java Bean属性的set方法来填入对象依赖。例如,如果你有一个带有
name
和job
属性的Person
对象,一个使用set方法注入的IoC容器会使用无参构造器创建一个Person
的实例,之后,它会继续调用setName()
和setJob()
方法。 - 字段注入
-
构造器和set方法注入都依赖于公共方法。而使用字段注入的时候,IoC容器通过直接设置对象字段的值来填入组件依赖。例如,如果你有一个带有
name
和job
字段的Person
对象,你的IoC容器会直接设置这两个字段来填入依赖(如:person.name = "Thomas"; person.job = job;
)。