记录Kite的学习历程之IOC注解

Kite学习框架的第八天

基于注解的 IOC 配置

1.在创建的实现层实现类的AccountServiceImpl加上注解

@Service(“accountService”):实现层注解,这时set方法可以不写
@Autowired :自动注入accountDao数据

package cn.kitey.service.impl;

import cn.kitey.dao.AccountDao;
import cn.kitey.dao.impl.AccountDaoImpl;
import cn.kitey.domain.Account;
import cn.kitey.service.AccountService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 账户的业务实现层A
 */

@Service("accountService")
public class AccountServiceImpl implements AccountService {

//    当我们使用注解注入的时候set方法不是必要的了
    @Autowired   //自动注入
    private AccountDao accountDao;


    public List<Account> findAll() {
        return accountDao.findAll();
    }

    public Account findById(Integer accountId) {
        return accountDao.findById(accountId);
    }

    public void saveAccount(Account account) {
        accountDao.saveAccount(account );
    }

    public void updateAccount(Account account) {
        accountDao.updateAccount(account);
    }

    public void deleteAccount(Integer accountId) {
        accountDao.deleteAccount(accountId);
    }


}

2. 为了不使用bean.xml我们创建了config包,用来装配置类

2.1 创建SpringConfiguration类并加上注解

这个类我们作为主类
Configuration:指定挡前类是一个配置类
ComponentScan:用于通过注解指定spring创建容器要扫面的包
import:用于引用其他配置类

package cn.kitey.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.PropertySource;

/**
 * 是一个配置类,作用跟bean.xml相同
 *
 * spring中新注解:
 * Configuration:
 *      作用:指定当前类是一个配置类
 *      有时可以省略不写
 * ComponentScan
 *      作用:用于通过注解指定spring创建容器要扫面的包
 *      属性
 *          value:basePackage的作用一样,指定要扫描的包名
 *          该注解类似于xml中的:
 *            
 *
 * bean:
 *      作用:用于把当前对象的返回值存入spring容器中
 *      属性:
 *          name:用于指定bean的id,不写时,为默认值,当前的方法名
 *      特点:
 *          当使用注解配置方法时,如果方法有参数,spring框架就会去容器查找有没有可用的bean对象
 *          查找的方式跟Autowired注解的作用一样的
 * import:
 *      作用:用于引用其他配置类
 *      value:用于指定其他配置类的字节码
 *            当我梦使用import的注解之后,有import注解的类就为父配置类,导入的为子配置类
 *
 * PropertySource
 *      作用:指定properties文件的位置
 *      属性:
 *          value:指定文件的名称和位置
 *              关键字:classpath 表示类路径下
 */
@Import(jdbcConfig.class)
@Configuration
@ComponentScan(value = "cn.kitey")
@PropertySource("classpath:jdbcConfig.properties")
public class SpringConfiguration {
}


2.2 创建子配置类jdbcConfig

bean:用于把当前对象的返回值存入spring容器中
作用:用于把当前对象的返回值存入spring容器中
属性:
name:用于指定bean的id,不写时,为默认值,当前的方法名
特点:
当使用注解配置方法时,如果方法有参数,spring框架就会去容器查找有没有可用的bean对象查找的方式跟Autowired注解的作用一样的

package cn.kitey.config;

import com.mchange.v2.c3p0.ComboPooledDataSource;
import org.apache.commons.dbutils.QueryRunner;
import org.springframework.beans.factory.config.BeanDefinition;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Scope;


import javax.sql.DataSource;
import java.beans.PropertyVetoException;

public class jdbcConfig {

    /**
     * 创建QueryRunner对象
     * @param dataSource
     * @return
     */

    @Bean(name = "runner")
    @Scope(BeanDefinition.SCOPE_PROTOTYPE)
    public QueryRunner createQueryRunner(DataSource dataSource){
        return new QueryRunner(dataSource);
    }



    @Bean(name = "dataSource")
    public DataSource createDataSource(){
        ComboPooledDataSource ds;
        try {
            ds = new ComboPooledDataSource();
            ds.setDriverClass("com.mysql.jdbc.Driver");
            ds.setJdbcUrl("jdbc:mysql://localhost:3306/eesy?serverTimezone=GMT%2B8");
            ds.setUser("root");
            ds.setPassword("25002500");
        } catch (PropertyVetoException e) {
            throw  new RuntimeException(e);
        }
        return ds;
    }
}


3. 在测试类中使用AnnotationConfigApplicationContext获取注解中的类容

    @Before
    public void init(){
        ApplicationContext xml = new AnnotationConfigApplicationContext(SpringConfiguration.class);
         xmlBean = xml.getBean("accountService", AccountServiceImpl.class);

   }


这时我们就完成了基于注解的配置

4.Spring 整合 Junit

4.1 导入新的jar包


<dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.0.2.RELEASE</version>
        </dependency>

4.2 .使用@RunWith 注解替换原有运行器


@RunWith(SpringJUnit4ClassRunner.class)

public class AccountServiceTest {
}

4.3 使用@ContextConfiguration 指定 spring 配置文件的位置 (这里我们shi’xiang)


@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfiguration.class)
public class AccountServiceTest {
}

4.4 使用@Autowired 给测试类中的变量注入数据


//自动注入
    @Autowired
    private AccountService xmlBean;

这时我们就可以省略代码:

   @Before
    public void init(){
        ApplicationContext xml = new AnnotationConfigApplicationContext(SpringConfiguration.class);
         xmlBean = xml.getBean("accountService", AccountServiceImpl.class);

   }


你可能感兴趣的:(每天的学习笔记)