5. 基于注解的Spring应用 - 非自定义 Bean 注解开发

99 阅读1分钟

非自定义Bean不能像自定义Bean一样使用 @Component 进行管理,非自定义Bean要通过工厂的方式进行实例化,使用 @Bean 标注方法即可,@Bean 的属性为 beanName ,如不指定为当前工厂方法名称

PS:工厂方法所在类必须要被 Spring 管理

// 将方法返回值 Bean 实例以 @Bean 注解指定的名称存储到 Spring 容器中
@Bean("dataSource")
public DataSource dataSource() {
    DruidDataSource dataSource = new DruidDataSource();
    // 设置4个基本参数
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl("jdbc:mysql://localhost:3306/mybatis");
    dataSource.setUsername("root");
    dataSource.setPassword("root");
    return dataSource;
}

如果 @Bean 工厂方法需要参数的话,则有如下几种注入方式:

  1. 使用 @Autowired 根据类型自动进行Bean的匹配,@Autowired 可以省略
  2. 使用 @Qualifier 根据名称进行Bean的匹配;
  3. 使用 @Value 根据名称进行普通数据类型匹配。
@Bean
@Autowired // 根据类型匹配参数
public Object objectDemo01(UserDao userDao) {
    System. out .println(userDao);
    return new Object();
}

@Bean
public Object objectDemo02(@Qualifier("userDao") UserDao userDao, 
@Value("${jdbc. username}") String userName) {
    System. out .println(userDao);
    System. out .println(userName);
    return new Object();
}