• 4、@Resource注解是什么


    1、@Resource注解与@Autowired类似,也是用来提供依赖注入的,

    @Resource注解是Java层面所提供的注解,@Autowired是Spring所提供的注解,

    @Resource注解中有一个name属性,针对name属性是否有值,@Resource底层流程是不同的。

    @Resource如果name属性有值,那么Spring容器将根据beanName去容器里面找到对应的bean,找不到会报错

    如果没有值,则:

    1、先判断该属性名字在Spring容器中是否存在Bean对象。

    2、如果存在,则成功找到Bean对象进行注入。

    3、如果不存在,则根据属性类型去Spring容器找bean对象,找到一个进行注入。

    @Resource注解代码:是在rt.jar包下,就是Root包下面的

    @Target({TYPE, FIELD, METHOD})
    @Retention(RUNTIME)
    public @interface Resource {
        /**
         * The JNDI name of the resource.  For field annotations,
         * the default is the field name.  For method annotations,
         * the default is the JavaBeans property name corresponding
         * to the method.  For class annotations, there is no default
         * and this must be specified.
         */
        String name() default "";
    
        /**
         * The name of the resource that the reference points to. It can
         * link to any compatible resource using the global JNDI names.
         *
         * @since Common Annotations 1.1
         */
    
        String lookup() default "";
    
        /**
         * The Java type of the resource.  For field annotations,
         * the default is the type of the field.  For method annotations,
         * the default is the type of the JavaBeans property.
         * For class annotations, there is no default and this must be
         * specified.
         */
        Class<?> type() default java.lang.Object.class;
    
        /**
         * The two possible authentication types for a resource.
         */
        enum AuthenticationType {
                CONTAINER,
                APPLICATION
        }
    
        /**
         * The authentication type to use for this resource.
         * This may be specified for resources representing a
         * connection factory of any supported type, and must
         * not be specified for resources of other types.
         */
        AuthenticationType authenticationType() default AuthenticationType.CONTAINER;
    
        /**
         * Indicates whether this resource can be shared between
         * this component and other components.
         * This may be specified for resources representing a
         * connection factory of any supported type, and must
         * not be specified for resources of other types.
         */
        boolean shareable() default true;
    
        /**
         * A product specific name that this resource should be mapped to.
         * The name of this resource, as defined by the <code>name</code>
         * element or defaulted, is a name that is local to the application
         * component using the resource.  (It's a name in the JNDI
         * <code>java:comp/env</code> namespace.)  Many application servers
         * provide a way to map these local names to names of resources
         * known to the application server.  This mapped name is often a
         * <i>global</i> JNDI name, but may be a name of any form. <p>
         *
         * Application servers are not required to support any particular
         * form or type of mapped name, nor the ability to use mapped names.
         * The mapped name is product-dependent and often installation-dependent.
         * No use of a mapped name is portable.
         */
        String mappedName() default "";
    
        /**
         * Description of this resource.  The description is expected
         * to be in the default language of the system on which the
         * application is deployed.  The description can be presented
         * to the Deployer to help in choosing the correct resource.
         */
        String description() default "";
    }
  • 相关阅读:
    OO设计的开闭原则
    OO设计的接口分隔原则
    玩大数据需要知道的12个工具
    怎么回答哪个更快的问题
    C#用extern alias解决两个assembly中相同的类型全名
    CoffeeScript, Ruby 和 C++的复杂度比较
    用python替代javascript?
    C#的内存模型和并发情况下受到的影响
    怎么看C++对象的内存结构 和 怎么解密C++的name mangling
    .NET中使用Unity和StructureMap来实现依赖注入Dependency Injection
  • 原文地址:https://www.cnblogs.com/fuckingPangzi/p/15746120.html
Copyright © 2020-2023  润新知