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

技术选型

  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)

    在这里插入图片描述

  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. 三层架构的搭建(并编写配置类)
    在这里插入图片描述

  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();
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值