Spring Bean 注入

2024-01-27  本文已影响0人  Tinyspot

1. 字段(属性)注入

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>
上一篇下一篇

猜你喜欢

热点阅读