Spring Bean 注入

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 配置方式

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 配置方式

无参构造

有参构造


有参构造 – 指定方法

【信息由网络或者个人提供,如有涉及版权请联系COOY资源网邮箱处理】

© 版权声明
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容