Spring 注解开发管理第三方bean

目录

前言

环境准备

 注解开发管理第三方bean

引入外部配置类

使用包扫描引入外部配置类

使用@import引入实现外部配置类

小结


前言

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

环境准备

  1. 创建一个Maven项目
  2. pom.xml添加Spring的依赖
  3. 添加一个配置类SpringConfig
  4. 添加BookDaoBookDaoImpl

 注解开发管理第三方bean

步骤一:导入对用jar包

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

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

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

注意:这个Mysql中的数据库是我们提前创建的,你们运行时也需要自己创建一个数据库以及对应的表

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

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

@Configuration
@ComponentScan("com.itheima")
@PropertySource("jdbc.properties")
public class SpringConfig {
    @Bean
    public DataSource dataSource() {
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/db1");
        ds.setUsername("root");
        ds.setPassword("123465");
        return ds;
    }
}
注意 : 不能使用 DataSource ds = new DruidDataSource()
因为DataSource接口中没有对应的setter方法来设置属性

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

public class Test {
    public static void main(String[] args) {
        加载配置类初始化容器
        AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
        DataSource dataSource = ctx.getBean(DataSource.class);
        System.out.println(dataSource);
    }
}

引入外部配置类

如果把所有的第三方 bean 都配置到 Spring 的配置类 SpringConfig 中,虽然可以,但是不利于代码阅
读和分类管理,所有我们就想能不能按照类别将这些 bean 配置到不同的配置类 ?
对于数据源的 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/db1");
        ds.setUsername("root");
        ds.setPassword("123465");
        return ds;
    }
}

让这个配置类能够被Spring配置类加载到,并创建DataSource对象在IOC容器中,有两种方法

使用包扫描引入外部配置类

步骤 1: Spring 的配置类上添加包扫描
@Configuration
@PropertySource("jdbc.properties")
@ComponentScan("com.itheima.config")
public class SpringConfig {

}
步骤 2: JdbcConfig 上添加配置注解
把JdbcConfig 类放入到 com.itheima.config 包下,被 Spring 配置类扫描到即可
@Configuration
public class JdbcConfig {
    @Bean
    public DataSource dataSource() {
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/db1");
        ds.setUsername("root");
        ds.setPassword("123465");
        return ds;
    }
}
步骤 3: 运行程序
注意:这种方法虽然可以使Spring配置类扫描到外部配置类,故第一种方法不推荐使用

使用@import引入实现外部配置类

这种方案可以不用加 @Configuration 注解,但是必须在 Spring 配置类上使用 @Import 注解手动引入
需要加载的配置类
步骤一:在Spring配置类中引入
@Configuration
//@ComponentScan("com.itheima.config")
@Import({JdbcConfig.class})
public class SpringConfig {

}

注意:

  • 扫描注解可以移除
  • @Import参数需要的是一个数组,可以引入多个配置类。
  • @Import注解在配置类中只能写一次,下面的方式是不允许的

如:

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

}

小结

在配置类环境下,注解开发管理第三方bean实现。

  1. 导入对应的jar
  2. 在配置类中添加一个方法
  3. 在方法上添加@Bean注解
  4. IOC容器中获取对象并打印
引入外部配置类
  1. 使用包扫描引入
  2. 使用@Import引入(推荐)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值