欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

基于注解配置的SpringIOC容器案例

程序员文章站 2022-03-26 14:04:57
...

技术选型

  1. SpringIoc核心容器
  2. Springjdbc
  3. Mysql
  4. Junit
  5. Druid连接池
  6. Maven工程

需求分析

使用以上技术选型,使用Java代码实现简单的CRUD操作,在Spring的Ioc核心容器中,这里使用xml配置文件进行配置

环境搭建

  1. Mysql环境
    CREATE DATABASE spring;
    CREATE TABLE account
    (id primary key,auto_increment,
    name varchar(50),
    money varchar(50)

    基于注解配置的SpringIOC容器案例

  2. 创建Maven工程,导入依赖

<dependencies>
	<!--SpringIoc容器-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <version>5.1.6</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid</artifactId>
        <version>1.0.9</version>
    </dependency>
    <!-- Spring-jdbc 用于配置JdbcTemplate -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
    <!--Spring与junit整合-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>5.0.2.RELEASE</version>
    </dependency>
</dependencies>
  1. 三层架构的搭建(并编写配置类)
    基于注解配置的SpringIOC容器案例

  2. 编写druid.properties配置文件(使用Druid连接池技术连接数据库所必需的)

#驱动加载
driverClassName=com.mysql.jdbc.Driver
#设定连接对象的参数(要连接哪一个库,以及用户名,密码)
url=jdbc:mysql://127.0.0.1:3306/spring?serverTimezone=UTC
#连接数据库的用户名
username=root
#连接数据库的密码
password=123456
#初始化时池中建立的物理连接个数
initialSize=2
#最大的可活跃的连接池数量
maxActive=10
#获取连接时最大等待时间,单位毫秒,超过连接就会失效
maxWait=3000

编码实现

  1. Dao中的代码
//告知spring这是持久层类,创建该类对象,并存入核心容器	key=dao
@Repository("dao")
public class AccountDaoImpl implements AccountDao {

    @Autowired
    @Qualifier("template")
    //自动注入数据,若bean中有符合类型数据,自动注入,若有多个符合类型数据
    //采用key=template的bean对象
    private JdbcTemplate template;

    public void delete(Integer id) {
        String sql="delete from account where id=?";
        template.update(sql,id);
    }

    public List<Account> selectAll() {
        String sql="select * from account";
        List<Account> list = template.query(sql, new BeanPropertyRowMapper<>(Account.class));
        return list;
    }
}
  1. Service中的代码
//告知spring这是业务层类,创建该类对象存入容器   key=service
@Service("service")
public class AccountServiceImpl implements AccountService {
    @Autowired
    @Qualifier("dao")
    //自动注入数据,查找容器中符合该类型的bean对象,若有多个
    //采用key=dao的bean对象
    private AccountDao dao;

    public void delete(Integer id) {
        dao.delete(id);
    }

    public void selectAll() {
        List<Account> accounts = dao.selectAll();
        for (Account account : accounts) {
            System.out.println(account);
        }
    }
}
  1. Config父配置中的代码
/*告知spring,该类是一个父配置类,并说明在创建容器时要扫描的包,并导入子配置类*/
@ContextConfiguration
@ComponentScan("dao")
@ComponentScan("service")
@Import(PropConfig.class)
public class Config {
    /*
    * 在容器中创建一个DataSource对象,创建该对象时需要参数
    * 若不指定@Qualifier,则会自动在容器中找有无符合的bean对象
    * */
    @Bean
    //bean注解用于把当前方法的返回值作为bean对象存入spring的ioc容器中
    public DataSource getDataSource(@Qualifier("prop") Properties prop) throws Exception {
        return DruidDataSourceFactory.createDataSource(prop);
    }

    /*
    * 在容器中创建一个JdbcTemplate对象,创建该对象时需要参数DataSource
    * 自动在容器中找有无符合的bean对象
    * */
    @Bean("template")
    //指定bean的id,默认值为当前方法的名称
    public JdbcTemplate getTemplate(DataSource dataSource){
        return new JdbcTemplate(dataSource);
    }
}

  1. PropConfig子配置类
/*加载外界properties配置文件,这里并没有什么用,可以通过value注解获取配置文件中的值*/
@PropertySource("classpath:druid.properties")
public class PropConfig {
    /*
    * 在容器中创建一个bean对象,是一个properties,key为prop
    * */
    @Bean(name="prop")
    public Properties getProp() throws IOException {
        Properties prop=new Properties();
        prop.load(PropConfig.class.getClassLoader().getResourceAsStream("druid.properties"));
        return prop;
    }
}

  1. 测试类中的代码
//使用junit提供的一个注解 @Runwith把原有的main方法替换,替换成spring的
@RunWith(SpringJUnit4ClassRunner.class)
//告知spring的运行器,spring容器创建是基于xml还是注解的,并且说明位置
@ContextConfiguration(classes = {Config.class})
public class CRUDByAnnoTest {

    @Autowired
    //此时,spring整合了junit,junit会根据我们的配置,自动创建好容器
    //已经有了容器,可以自动注入数据
    private AccountService service;
    
    @Test
    public void delete() {
        service.delete(3);
    }
    @Test
    public void select() {
        service.selectAll();
    }
}
相关标签: java