之前学纯注解的一些配置,没有特地记录,在此处综合的把之前学的配置纯注解的方法,也回顾一下,并根据事务控制来添加新的东西。
在上一篇已经将事务控制部分,通过xml和注解综合的方式,配置了起来,这一篇试着完全去掉xml文件,通过Config实体类来配置和xml一样功能。
一、pom.xml的依赖
<!--打包方式为jar-->
<packaging>jar</packaging>
<dependencies>
<!--spring框架的基本依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!--spring的aop依赖-->
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.8.7</version>
</dependency>
<!--spring的shiwu事务管理器依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!--单元测试的依赖-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
<!--spring整合junit的依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
<!--mysql的依赖-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.6</version>
</dependency>
<!--spring的jdbc依赖-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
</dependencies>
二、编写代码
这里的很多代码,比如IAccountDao接口及其实现类,IAccountService接口及其实现类,以及Account账户实体类,都是和上上一篇SSM学习之路——spring第四天_使用xml实现事务控制基本一致,并且使用注解配置事务,在SSM学习之路——spring第四天_使用注解实现事务控制已经说明,只是一点点小改动,其他不同的地方下面会提到
不同点:
一、AccountDaoImpl类
之前是继承了一个spring给我们提供的JdbcDaoSupport
类,由于我们现在使用注解来给accountDaoImpl添加进IOC容器,并且JdbcDaoSupport
类里的jdbcTemplate是不能通过注解注入的(详见SSM学习之路——spring第四天_使用xml实现事务控制),所以我们要改成:
对比如下:
这样,我们就去掉了xml中原本对应的
二、Client类:
由于我们之前是通过xml配置的,现在是通过纯注解,所以我们的main函数里面ApplicationContext ac = new ClassPathXmlApplicationContext("bean.xml");
引用的bean.xml已经不复存在,进而我们是从一个配置类SpringConfig类里面读取配置(具体的配置在下面会具体提到),所以这句代码应该改成:ApplicationContext ac = new AnnotationConfigApplicationContext(SpringConfig.class);
三、编写配置类(重点)
一、SpringConfig类:(主配置类)
//声明这是一个配置类
@Configuration
//声明注解扫描的包
@ComponentScan("com.itheima")
//导入子配置类
@Import({jdbcConfig.class,transactionConfig.class})
//指定配置类所需要读取的Properties文件,位于resources资源文件目录下
@PropertySource("dataSource.properties")
//声明支持事务管理器
@EnableTransactionManagement
public class SpringConfig {
}
二、jdbcConfig类:
这里的@Bean注解也是通过一个方法来返回创建所需要的jdbcTemplate对象和dataSource数据源对象,并加入spring的IOC容器中,并通过@Value来读取dataSource.properties文件里的数据,注入给数据源需要的字段。
public class jdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String username;
@Value("${jdbc.password}")
private String password;
@Bean("jdbcTemplate")
public JdbcTemplate createJdbcTemplate(DataSource dataSource){
return new JdbcTemplate(dataSource);
}
@Bean("dataSource")
public DataSource createDataSource(){
DriverManagerDataSource ds = new DriverManagerDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(username);
ds.setPassword(password);
return ds;
}
}
这一段配置,去掉了原本xml中对应的
三、transactionConfig类:
注意这里的返回值是PlatformTransactionManager
,但是返回的是一个DataSourceTransactionManager
对象,并传入一个数据源对象给这个事务管理器
public class transactionConfig {
@Bean("transferManager")
public PlatformTransactionManager createTransactionManager(DataSource dataSource){
return new DataSourceTransactionManager(dataSource);
}
}
这一个配置,去掉了xml中原本对应的
结合上一篇的注解的内容,完完全全把bean.xml中的内容一点不剩的干掉了,所以把bean.xml完完全全删掉,也可以运行。这样我们通过了配置类和注解,实现了无xml的写法。但是我们通过xml和注解的配合使用,是可以更方便我们开发的,我们可以使用注解来创建一些类,通过xml来配置事务管理器(防止写很多个@Transactional)
至此,spring的入门内容已经学习的差不多了,接下来跟着视频继续学习springMVC的内容,进行更深入的将SSM框架。