JSR-299最新草案中的一个非常好的新特性是能够注入所有特定类型的bean的引用,例如
@Any Instance<Connection> anyConnections;
这个注入点实际上并没有什么特别之处。@Any是一个内置的绑定,定义为支持所有bean。Instance<T>是一个接口,由使用注入点元数据API的内置bean实现,以检查注入点的绑定类型。(如果容器没有提供,你可以自己实现。)Instance<T>。
现在,Instance<T>继承Iteratable<T>,因此我们可以迭代anyConnections来对实现Connection:
for (Connection c: anyConnections) c.close();
的所有bean执行某些操作
Connection userDatabaseConnection = anyConnections.select( new AnnotationLiteral<UserDatabase>() {} ).get();
我们既可以通过动态方式
@UserDatabase Instance<Connection> userDatabaseConnection;
或使用注入点上的注解来缩小我们感兴趣的连接集
@Any Instance<Object> anyBeans;
for (Object bean: anyBeans) doSomething(bean);