Java企业中的BeanManager究竟做了什么?

时间:2014-10-13 23:25:05

标签: java java-ee

在Spring中,我可以使用应用程序上下文动态创建bean。

在java企业中搜索一些类似代码的代码,我遇到了以下代码片段:

public class BeanManagingUtils {

    private BeanManager beanManager;

    public BeanManagingUtils()
    {
        try {
            InitialContext initialContext = new InitialContext();
            beanManager =  (BeanManager) initialContext.lookup("java:comp/BeanManager");
        }
        catch (NamingException e) {
            //log.error("Couldn't get BeanManager through JNDI");
            e.printStackTrace();
        }
    }

    @SuppressWarnings("unchecked")
    public <T> T getContextualInstance(final Class<T> type)
    {
        T result = null;
        Bean<T> bean = (Bean<T>) beanManager.resolve(beanManager.getBeans(type));
        if (bean != null)
        {
            CreationalContext<T> context = beanManager.createCreationalContext(bean);
            if (context != null)
            {
                result = (T) beanManager.getReference(bean, type, context);
            }
        }
        return result;
    }
}

通过使用类调用getContextualInstance,我可以得到它(有点)来生成一个bean,但是我不知道它生成了什么类型的bean,例如它是无状态ejb,有状态ejb,托管如果所讨论的bean根本没有注释,它似乎很愉快地创建它,如果我使用'@Stateful'注释bean,则会出错。我不明白这里有关于BeanManager的文档http://docs.oracle.com/javaee/6/api/javax/enterprise/inject/spi/BeanManager.html

任何人都可以了解它正在做什么以及它创造了什么样的豆类,或者指出我更全面的文档?

非常感谢!

0 个答案:

没有答案