# 第三方 bean 依赖注入

# 简单类型依赖注入

1.SpringConfig

@SuppressWarnings("all")
@Configuration
// 导入配置类
@Import({JdbcConfig.class})
public class SpringConfig {
}

2.JdbcConfig

@SuppressWarnings("all")
// 在 SpringConfig 中使用 @Import 导入的类可不不进行配置 @Configuration 注解
public class JdbcConfig {
    @Value("com.mysql.cj.jdbc.Driver")
    private String driver;
    @Value("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8serverTimezone=UTC")
    private String url;
    @Value("root")
    private String username;
    @Value("dkx")
    private String password;
//    1. 定义一个方法获得管理的对象
//    2. 添加 @Bean 表示当前方法返回值是一个 bean
    @Bean("druid")
    public DataSource getDataSource(){
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName("${driver}");
        druidDataSource.setUrl("${url}");
        druidDataSource.setUsername("${username}");
        druidDataSource.setPassword("${password}");
        return druidDataSource;
    }
}

3. 测试代码

public void test(){
        ApplicationContext c = new AnnotationConfigApplicationContext(SpringConfig.class);
        DataSource dataSource = c.getBean("druid",DataSource.class);
        System.out.println(dataSource);
    }

# 引用类型依赖注入

1.SpringConfig

@Configuration
@ComponentScan("com.dkx.spring")
public class SpringConfig {
}

2.JdbcConfig

@SuppressWarnings("all")
// 在 SpringConfig 中使用 @Import 导入的类可不不进行配置 @Configuration 注解
@Configuration
public class JdbcConfig {
    @Value("com.mysql.cj.jdbc.Driver")
    private String driver;
    @Value("jdbc:mysql://localhost:3306/mybatis?characterEncoding=utf-8serverTimezone=UTC")
    private String url;
    @Value("root")
    private String username;
    @Value("dkx")
    private String password;
//    1. 定义一个方法获得管理的对象
//    2. 添加 @Bean 表示当前方法返回值是一个 bean
    @Bean("druid")
    public DataSource getDataSource(BookDao bookDao){
        System.out.println(bookDao);
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setDriverClassName("${driver}");
        druidDataSource.setUrl("${url}");
        druidDataSource.setUsername("${username}");
        druidDataSource.setPassword("${password}");
        return druidDataSource;
    }
}
  • 引用类型注入只需要为 bean 定义方法设置形参即可,容器会根据类型自动装配对象

3. 测试类代码

public void test(){
        ApplicationContext c = new AnnotationConfigApplicationContext(SpringConfig.class);
        DataSource dataSource = c.getBean("druid",DataSource.class);
        System.out.println(dataSource);
    }