配置类---完全代替xml实现第三方类加入IOC容器

时间:2024-5-21    作者:老大夫    分类: SSM


解决了

  • 需要标签引入第三方类的问题
  • 需要</context:component-scan> 扫描包的问题
  • 需要</context:property-placeholder> 引入配置文件的问题

配置类编写


/**
 * 1. 包扫描配置
 * 2. 引用外部文件配置
 * 3. 声明第三方依赖Bean组件
 */

/**
 * 步骤一:添加Configuration注解代表这是配置类
 * 步骤二:实现上面的三个功能注解
 * 步骤三:
 */

@ComponentScan("com.atguigu.ioc_01")
@PropertySource(value="classPath:jdbc.properties")
@Configuration
public class JavaConfiguration {

    /**
     * 问题一:BeanName的问题
     *       默认方法名
     *       指定:name属性
     * 问题二:周期方法的问题
     *      原有注解方案 PostConstruct  + PreDestroy
     *      Bean属性指定:initMethod / destroyMethod 指定
     * 问题三:作用域问题
     *      使用@Scope
     * 问题四:如何引用其他的IOC组件
     *
     *
     */

    @Scope(scopeName = ConfigurableBeanFactory.SCOPE_SINGLETON)
    @Bean(name = "ergouzi",initMethod = "",destroyMethod = "",)
    public DruidDataSource druidDataSource() {
        //实现具体的实例化过程
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/studb");
        druidDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        druidDataSource.setUsername("root");
        druidDataSource.setPassword("1234");
        return druidDataSource;
    }

    @Bean(name = "lvdandan",initMethod = "",destroyMethod = "",)
    public DruidDataSource druidDataSource2() {
        //实现具体的实例化过程
        DruidDataSource druidDataSource = new DruidDataSource();
        druidDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/studb");
        druidDataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        druidDataSource.setUsername("root");
        druidDataSource.setPassword("1234");
        return druidDataSource;
    }

    @Bean
    public JdbcTemplate jdbcTemplate(){
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        //需要引用IOC中的其他组件
        //方案一,其他组件也是@Bean方法,可以从IOC获取组件
        jdbcTemplate.setDataSource(druidDataSource2());
        return null;
    }

    @Bean
    //方案二使用形参列表传值
    public JdbcTemplate jdbcTemplate1(DataSource lvdandan){
        JdbcTemplate jdbcTemplate = new JdbcTemplate();
        //需要引用IOC中的其他组件
        //方案二使用形参列表传值,可以是一个也可以是多个
        //如果有多个 形参名可以使用对应Bean的id标识
        jdbcTemplate.setDataSource(lvdandan);
        return null;
    }

}

}

使用配置类创建容器对象

@Test
    public void testIoC(){
        //1.创建IOC容器
        AnnotationConfigApplicationContext applicationContext=new AnnotationConfigApplicationContext(JavaConfiguration.class);
            //创建方式二 ,先创建 再 配置
            AnnotationConfigApplicationContext applicationContext1=new AnnotationConfigApplicationContext();
            applicationContext1.register(JavaConfiguration.class);
            //载入配置后刷新一下
            applicationContext1.refresh();
        //2.拿到bean组件
        StudentController studentController = applicationContext1.getBean(StudentController.class);
        //3.使用组件
        System.out.println(studentController);
        //4.关闭容器
        applicationContext1.close();
        applicationContext.close();
    }


扫描二维码,在手机上阅读

推荐阅读: