5. 基于注解的Spring应用 - Bean依赖注入注解开发

99 阅读2分钟
  • Bean依赖注入的注解,主要是使用注解的方式替代 xml 的 <property> 标签完成属性的注入操作
<bean id ="" class="">
    <property name ="" value=""/>
    <property name ="" ref=""/>
</bean>
  • Spring主要提供如下注解,用于在 Bean 内部进行属性注入的:
属性注入注解描述
@Value使用在字段或方法上, 用于注入普通数据
@Autowire使用在字段或方法上, 用于根据类型(byType)注入引用数据
@Qualifer使用在字段或方法上, 结合@Autowire, 根据名称注入
@Resource使用在字段或方法上, 根据类型或名称进行注入
  • 通过 @Value 直接注入普通属性(本质就是直接写死属性值,基本没啥用处)
@Value("张三")
private String username;

@Value("张三")
public void setUsername(String username){
    System. out .println(username);
}
  • 通过 @Value 注入 properties 文件中的属性(这个还稍微有点点用)
@Value("${jdbc.username}")
private String username;

@Value("${jdbc.username}")
public void setUsername(String username){
    System. out .println(username);
}

加载properties文件

<context:property-placeholder location ="classpath:jdbc.properties"/>
  • @Autowired注解,用于根据类型进行注入
// 使用在属性上直接注入
@Autowired
private UserDao userDao;

// 使用在方法上直接注入
@Autowired
public void setUserDao(UserDao userDao){
    System. out .println(userDao);
}

// 使用在方法上直接注入, 同一类型的多个bean都会被保存在list中
@Autowired
public void setUserDaoList(List<UserDao> userDaoList){
    System. out .println(userDaoList);
}

当容器中同一类型的 Bean 实例有多个时,会尝试自动根据名字进行匹配;

当容器中同一类型的 Bean 实例有多个时,且名字与被注入 Bean 名称不匹配时会报错

// 匹配当前 Bean
@ Repository("userDao")
public class UserDaoImpl implements UserDao{}

@ Repository("userDao2")
public class UserDaoImpl2 implements UserDao{}

@Qualifier配合 @Autowired 可以完成根据名称注入 Bean 实例,使用 @Qualifier 指定名称

@Autowired
@Qualifier("userDao2")
private UserDao userDao;

@Autowired
@Qualifier("userDao2")
public void setUserDao(UserDao userDao){
    System. out .println(userDao);
}

@Resource注解既可以根据类型注入,也可以根据名称注入,无参就是根据类型注入,有参数就是根据名称注入

PS:@Resource 注解存在于javax.annotation包中,Spring 对其进行了解析

@Resource
private UserDao userDao;

@Resource(name = "userDao2")
    public void setUserDao(UserDao userDao){
    System. out .println(userDao);
}