Container容器概念:
依赖项注入的构造函数、方法和属性的关联。不可变。
注入方法或者构造函数的时候,你可以另外关联其参数和指定依赖的名称。当一个参数没有注解,容器使用方法或构造方法去单独注解。
例如:
class Foo {
// Inject the int constant named "i".
Inject("i") int i;
// Inject the default implementation of Bar and the String constant named "s".
Inject Foo(Bar bar, @Inject("s") String s) {
...
}
// Inject the default implementation of Baz and the Bob implementation named "foo".
Inject void initialize(Baz baz, @Inject("foo") Bob bob) {
...
}
// Inject the default implementation of Tee.
Inject void setTee(Tee tee) {
...
}
}
创建和注入Foo实例
Container c = ...;
Foo foo = c.inject(Foo.class);
Container容器源码预览
public interface Container extends Serializable {
/**
* Default dependency name.
*/
String DEFAULT_NAME = "default";
/**
* Injects dependencies into the fields and methods of an existing object.
*/
void inject(Object o);
/**
* Creates and injects a new instance of type {@code implementation}.
*/
<T> T inject(Class<T> implementation);
/**
* Gets an instance of the given dependency which was declared in
* {@link com.opensymphony.xwork2.inject.ContainerBuilder}.
*/
<T> T getInstance(Class<T> type, String name);
/**
* Convenience method. Equivalent to {@code getInstance(type,
* DEFAULT_NAME)}.
*/
<T> T getInstance(Class<T> type);
/**
* Gets a set of all registered names for the given type
* @param type The instance type
* @return A set of registered names or empty set if no instances are registered for that type
*/
Set<String> getInstanceNames(Class<?> type);
/**
* Sets the scope strategy for the current thread.
*/
void setScopeStrategy(Scope.Strategy scopeStrategy);
/**
* Removes the scope strategy for the current thread.
*/
void removeScopeStrategy();
}
还有很多,待续,,,,,,