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

1 注解开发管理第三方bean

//如果有多个bean要被Spring管理,直接在配置类中多些几个方法,方法上添加@Bean注解即可。

(1) 导入对应的jar包

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

(2) 在配置类中添加一个方法

@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;
    }
}

(3) 在方法上添加@Bean注解

@Configuration
public class SpringConfig {
    @Bean
    //@Bean注解的作用是将方法的返回值制作为Spring管理的一个bean对象。
    //与@Component区别:@Component加在类上,@Bean加在返回值为对象的方法上。
    public DataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        //注意:不能使用 DataSource ds = new DruidDataSource(),因为DataSource接口中没有对应的setter方法来设置属性。
        ds.setDriverClassName("com.mysql.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/spring_db");
        ds.setUsername("root");
        ds.setPassword("root");
        return ds;
    }
}

(4) 从IOC容器中获取对象并打印

public class App {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext acac = new AnnotationConfigApplicationContext(SpringConfig.class);
        DataSource dataSource = acac.getBean(DataSource.class);
        //通过数据类型获取bean。
        System.out.println(dataSource);
    }
}


2 引入外部配置类

//按照类别将这些第三方类的bean配置到不同的配置类中。
//使这个配置类被Spring配置类加载到,并创建DataSource对象在IOC容器中。

(1) 使用包扫描引入

//不推荐使用
<1> 新建一个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;
    }
}

<2> 在Spring的配置类上添加包扫描

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

<3> 在JdbcConfig上添加配置注解@Configuration
//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/spring_db");
        ds.setUsername("root");
        ds.setPassword("root");
        return ds;
    }
}

<4> 运行程序

(2) 使用@Import引入

//推荐使用
<1> 新建一个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;
    }
}

<2> 在Spring配置类中引入

@Configuration
@Import({JdbcConfig.class})
public class SpringConfig {
}

<3> 运行程序

 

3 注解开发实现为第三方bean注入资源

(1) 简单数据类型

<1> 类中提供四个属性

public class JdbcConfig {
    private String driver;
    private String url;
    private String userName;
    private String password;
    
    @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;
    }
}

<2> 使用@Value注解引入值

public class JdbcConfig {
    @Value("com.mysql.jdbc.Driver")
    //@Value一般会被用在从properties配置文件中读取内容进行使用。
    //主配置类所读取的配置文件,第三方配置类也可以读取使用其中的键值对。
    private String driver;
    @Value("jdbc:mysql://localhost:3306/spring_db")
    private String url;
    @Value("root")
    private String userName;
    @Value("password")
    private String password;
    
    @Bean
    public DataSource dataSource(){
        DruidDataSource ds = new DruidDataSource();
        ds.setDriverClassName(driver);
        ds.setUrl(url);
        ds.setUsername(userName);
        ds.setPassword(password);
        return ds;
    }
}

<3> 运行程序

(2) 引用数据类型

//假设在构建DataSource对象的时候,需要用到BookDao对象。
<1> 在SpringConfig中扫描BookDao
//扫描的目的是让Spring能管理到BookDao,也就是说要让IOC容器中有一个bookDao对象。

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

<2> 在JdbcConfig类的方法上添加参数bookDao

@Bean
public DataSource dataSource(BookDao bookDao){
    //引用类型注入只需要为bean定义方法设置形参即可,此时容器会根据类型自动装配对象。
    System.out.println(bookDao);
    DruidDataSource ds = new DruidDataSource();
    ds.setDriverClassName(driver);
    ds.setUrl(url);
    ds.setUsername(userName);
    ds.setPassword(password);
    return ds;
}

<3> 运行程序

posted @ 2023-10-17 20:11  10kcheung  阅读(70)  评论(0)    收藏  举报