本节内容

  • 之前我们基于xml配置时使用的是ClassPathXmlApplicationContext这个ApplicationContext接口的实现类,本节我们要学习的是使用AnnotationConfigApplicationContext这个实现类进行ApplicationContext 容器的初始化操作,这在这个过程中我们将学习到
    @Configuration、@ComponentScan、@Bean、@Import @PropertySource这几个新的注解。
  • 我们要把上两节写的项目进行改写,改写成通过使用config.class文件进行spring配置的方式。

    代码简单展示

package com.lujuan.config;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;


@Configuration
@ComponentScan(basePackages = "com.lujuan")
public class SpringConfigration {

    @Bean(name = "queryRunner")
    public QueryRunner method1( @Qualifier(value = "dataSource")ComboPooledDataSource ds,  @Qualifier(value = "dataSource")ComboPooledDataSource ds2){

        System.out.println(ds==ds2);

        return new QueryRunner(ds);
    }

    @Bean(name="dataSource")
    public ComboPooledDataSource method2(){

        ComboPooledDataSource ds = null;
        try{
            ds = new ComboPooledDataSource();
            ds.setDriverClass("com.mysql.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mysql://localhost:3306/eesy?characterEncoding=utf8");
            ds.setUser("root");
            ds.setPassword("Admin@123");
        }catch (Exception e){

        }

        return ds;
    }

}
package com.lujuan;

import com.lujuan.domain.Account;
import com.lujuan.service.impl.AccountServiceImpl;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import java.util.List;

@RunWith(SpringJUnit4ClassRunner.class)
//@ContextConfiguration(locations = "classpath:bean.xml")
@ContextConfiguration(classes = com.lujuan.config.SpringConfigration.class)
public class AccountServiceTest {

    @Autowired
    private AccountServiceImpl ac;

    @Test
    public void testFindAll(){

        List<Account> accounts = ac.findAllAccount();
        for(Account account:accounts)
            System.out.println(account.toString());
    }

    @Test
    public void testFindAccountById() {

        Account account = ac.findAccountById(1);
        System.out.println(account);

    }

    @Test
    public void testAddAccount() {

        Account account = new Account();
        account.setName("ddd");
        account.setMoney(2000f);
        ac.addAccount(account);

    }

    @Test
    public void testDeleteAccountById() {

        ac.deleteAccountById(1);
    }

    @Test
    public void testUpdateAccount() {

        Account account = ac.findAccountById(4);
        account.setName("eeee");
        account.setMoney(3333f);

        ac.updateAccount(account);

    }

}

执行我们的测试类中的方法,我们可以看到应用这种方法我们也能够正常的执行成功。我们主要是完成一个一个config类,然后在测试类中通过使用AnnotationConfigApplicationContext这个容器类进行容器和bean对象的初始化。

改写上一个工程项目

解释说明

  • @Configuration:表明当前类是一个配置类,可用于ApplicationContext的初始化。
  • @ComponentScan:用来扫描那些使用注解的进行配置的包
  • @Bean :对于那些其他人的jar包中生成的bean对象,可用这种方式进行。
    其他的注解可以用的时候再学习。