IOC/DI注解开发管理第三方bean

问题:定义bean的时候都是在自己开发的类上面写个注解就完成了,但如果是第三方的类,这些类都是
在jar包中,我们没有办法在类上面添加注解,这个时候该怎么办?
解决:遇到上述问题,我们就需要有一种更加灵活的方式来定义bean,这种方式不能在原始代码上面书写注
解,一样能定义bean,这就用到了一个全新的注解@Bean。

案例:实现对Druid数据源的管理

步骤1:导入相应的jar包

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.16</version>
</dependency>

步骤2:在配置类中添加一个方法

注意该方法的返回值就是要创建Bean对象类型

@Configuration
public class SpringConfig {
	public DataSource dataSource(){
		DruidDataSource ds = new DruidDataSource();
		ds.setDriverClassName("com.mysql.jdbc.Driver");
		ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
		ds.setUsername("root");
		ds.setPassword("root");
		return ds;
	}
}

步骤3:在方法上添加@Bean注解

@Bean注解的作用是将方法的返回值制作为Spring管理的一个bean对象。

@Configuration
public class SpringConfig {
	@Bean
	public DataSource dataSource(){
		DruidDataSource ds = new DruidDataSource();
		ds.setDriverClassName("com.mysql.jdbc.Driver");
		ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
		ds.setUsername("root");
		ds.setPassword("root");
		return ds;
	}
}

注意: 不能使用DataSource ds = new DruidDataSource()
因为DataSource接口中没有对应的setter方法来设置属性。

步骤四:从IOC容器中获取对象并打印

public class App {
	public static void main(String[] args) {
		AnnotationConfigApplicationContext ctx = new
			AnnotationConfigApplicationContext(SpringConfig.class);
		DataSource dataSource = ctx.getBean(DataSource.class);
		System.out.println(dataSource);
	}
}

问题二:如何引入外部配置类

为了进行分类,对于数据源的bean,我们新建一个JdbcConfig配置类,并把数据源配置到该类下。

public class JdbcConfig {
	@Bean
	public DataSource dataSource(){
		DruidDataSource ds = new DruidDataSource();
		ds.setDriverClassName("com.mysql.jdbc.Driver");
		ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
		ds.setUsername("root");
		ds.setPassword("root");
		return ds;
	}
}

引入外部配置类

方法一:使用包扫描引入

@Configuration
@ComponentScan("com.itheima.config")
public class SpringConfig {
}

方法二:使用@Import引入

这种方案可以不用加@Configuration注解,但是必须在Spring配置类上使用@Import注解手动引入
需要加载的配置类

@Configuration
//@ComponentScan("com.itheima.config")
@Import({JdbcConfig.class})
public class SpringConfig {
}

注意: @Import注解只能写一次

问题三:假设在构建DataSource对象的时候,需要用到BookDao对象,该如何把BookDao对象注入进方法内让其使用呢?

步骤一:在SpringConfig中扫描BookDao

步骤二:在JdbcConfig类的方法上添加参数

@Bean
public DataSource dataSource(BookDao bookDao){
	System.out.println(bookDao);
	DruidDataSource ds = new DruidDataSource();
	ds.setDriverClassName(driver);
	ds.setUrl(url);
	ds.setUsername(userName);
	ds.setPassword(password);
	return ds;
}
  • 8
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值