Spring(十二)- Spring 非自定义Bean注解

文章目录

  • 一、Spring 非自定义Bean注解

一、Spring 非自定义Bean注解

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

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

PS:工厂方法所在类必须要被Spring管理。例如上面的工厂方法dataSource()所在的类ConfigBean需要先被注入到容器中

如果@Bean工厂方法需要参数的话,则有如下几种注入方式:
⚫ 使用@Autowired 根据类型自动进行Bean的匹配,@Autowired可以省略 ;
⚫ 使用@Qualifier 根据名称进行Bean的匹配;
⚫ 使用@Value 根据名称进行普通数据类型匹配。

@Bean
@Autowired //根据类型匹配参数
public Object objectDemo01(UserDao userDao){
	System.out.println(userDao);
	return new Object();
}

@Bean
public Object objectDemo02(@Autowired UserDao userDao){// @Autowired作用在参数上时,可以省略
	System.out.println(userDao);
	return new Object();
}

// @Qualifier可以单独使用在参数上,根据名称注入
@Bean
public Object objectDemo03(@Qualifier("userDao") UserDao userDao, @Value("${jdbc.username}") String username){
	System.out.println(userDao);
	System.out.println(username);
	return new Object();
}

你可能感兴趣的:(Spring,spring,java,mybatis)