美文网首页
Spring Bean 注入

Spring Bean 注入

作者: Tinyspot | 来源:发表于2024-01-27 17:29 被阅读0次

    1. 字段(属性)注入

    • spring framerwork 4.0 后不推荐使用
    • 可用注解 @Resource, @Autowired, @Inject

    1.1 @Resource 注解

    package javax.annotation;
    
    @Target({TYPE, FIELD, METHOD})
    @Retention(RUNTIME)
    public @interface Resource {
    }
    

    示例:

    @Component
    public class UserConfigManager {
        @Resource
        private UserConfig userConfig;
    }
    

    1.2 @Autowired 注解

    @Target({ElementType.CONSTRUCTOR, ElementType.METHOD, ElementType.PARAMETER, ElementType.FIELD, ElementType.ANNOTATION_TYPE})
    @Retention(RetentionPolicy.RUNTIME)
    @Documented
    public @interface Autowired {
        boolean required() default true;
    }
    

    示例:

    @Component
    public class UserConfigManager {
        @Autowired
        private UserConfig userConfig;
    }
    

    注:@Autowired 处有一个黄色的波浪线提示 "Field injection is not recommended"(不推荐使用字段注入)

    补充:
    @Autowired 是按类型装配的,可通过 @Qualifier("beanName") 指定 bean 名称

    @Component
    public class UserConfigManager {
        @Autowired
        @Qualifier("userConfig")
        private UserConfig userConfig;
    }
    

    2. Setter 方法注入

    • 优点:可以按需注入

    2.1 注解方式

    @Component
    public class UserConfigManager {
        private UserConfig userConfig;
    
        @Resource
        public void setUserConfig(UserConfig userConfig) {
            this.userConfig = userConfig;
        }
    

    2.2 XML 配置方式

    <bean id="user" class="org.cooboot.entity.User">
      <property name="name" value="tinyspot" />
      <property name="age" value="20" />
    </bean>
    

    3. 构造器注入(推荐)

    • 使用构造函数给成员变量赋值

    3.1 注解注入

    方式一:通过有参构造注入

    @Component
    public class UserConfigManager {
        private UserConfig userConfig;
    
        public UserConfigManager(UserConfig userConfig) {
            this.userConfig = userConfig;
        }
    }
    

    方式二:有参构造注解注入

    @Component
    @AllArgsConstructor
    public class UserConfigManager {
        private UserConfig userConfig;
    }
    

    3.2 XML 配置方式

    无参构造

    <bean id="user" class="org.cooboot.entity.User">
    

    有参构造

    <!-- 方式一:index 指定参数的索引位置 -->
    <bean id="user" class="org.cooboot.entity.User">
      <constructor-arg index="0" value="tinyspot" />
      <constructor-arg index="1" ref="otherBean" />
    </bean>
    
    <!-- 方式二:name 指定参数名称 -->
    <bean id="user" class="org.cooboot.entity.User">
        <constructor-arg name="name" value="tinyspot" />
        <constructor-arg name="age" value="20" />
        <constructor-arg index="1" ref="otherBean" />
    </bean>
    

    有参构造 - 指定方法

    <bean id="user" class="org.cooboot.entity.User" factory-method="header">
      <constructor-arg index="0" value="tinyspot" />
      <constructor-arg index="1" ref="otherBean" />
    </bean>
    

    相关文章

      网友评论

          本文标题:Spring Bean 注入

          本文链接:https://www.haomeiwen.com/subject/cypiodtx.html