传统的资源注入采用JNDI注入方式:

    InitialContext initCtx = new InitialContext();
                  
        // Perform JNDI lookup to obtain the resource.
                 
    catalogDS = (DataSource)
                  
    initCtx.lookup("java:comp/env/jdbc/catalogDS");
    
在JavaEE5时代通过注解的方式注入资源:

private @Resource DataSource catalogDS;
    
但JavaEE5的资源注入是受限的,只有容器受管组件,比如EJB,Servlet,JSP tag hangler等。一个方面考虑的扫描的性能,另一个
对组件的创建有更好的控制。

在JavaEE6时代又出现了DI和CDI,让资源注入搞得无处不在。也大大增了开发难度。DI相关Annotation。
@Inject,@Named,@Qualifier,@Scope,@Singleton

http://www.oracle.com/technetwork/articles/javaee/injection-141192.html