7.4.2. 使用上下文和依赖注入将对象注入 Bean
如果在应用程序中检测到上下文和依赖注入组件,则上下文和依赖注入会自动激活。如果要自定义配置使其与默认值不同,您可以在部署存档中包含 META-INF/beans.xml 文件或 WEB-INF/beans.xml 文件。
将对象注入其他对象
要获取类的实例,请在 bean 中为字段标上
@Inject:public class TranslateController { @Inject TextTranslator textTranslator; ...直接使用注入的对象方法。假设
TextTranslator有一个方法转换:// in TranslateController class public void translate() { translation = textTranslator.translate(inputText); }在 Bean 的构造器中使用注入。您可以将对象注入到 Bean 的构造器中,作为使用工厂或服务定位器创建对象的替代方法:
public class TextTranslator { private SentenceParser sentenceParser; private Translator sentenceTranslator; @Inject TextTranslator(SentenceParser sentenceParser, Translator sentenceTranslator) { this.sentenceParser = sentenceParser; this.sentenceTranslator = sentenceTranslator; } // Methods of the TextTranslator class ... }使用
Instance(<T>)接口以编程方式获取实例。当使用 bean 类型进行参数化时,Instance接口可以返回TextTranslator的实例。@Inject Instance<TextTranslator> textTranslatorInstance; ... public void translate() { textTranslatorInstance.get().translate(inputText); }
将对象注入 Bean 时,所有对象的方法和属性都可用于您的 Bean。如果您注入到 bean 的构造器中,则调用 bean 的构造器时会创建注入对象的实例,除非注入引用已存在的实例。例如,如果在会话生命周期内注入会话范围 Bean,则不会创建新的实例。