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>
网友评论