文章目录
1.配置类
(1)JdbcConfig
①:JdbcConfig类中主要就是来配置jdbc,首先定义四个属性 ==> driver,url,username,password,在每个属性上面用@Value注解
这里简单介绍一下@Value注解:如果想要动态读取配置文件中的某个系统属性,可以使用@Value注解。这个注解还有许多用法,这里就不描述了。
②:然后再创建数据库连接池(其实就是一个存放数据库连接的容器),在上面添加@Bean
为什么要创建数据库连接池:如果没有连接池,那么在使用jdbc程序时,会反复创建连接,销毁连接,这样非常耗费资源。并不能反复利用。创建之后,就可以从连接池中获取连接,用完放回,从而反复利用,优化性能
③:创建jdbc事物管理器
采用spring中PlatformTransactionManager接口自带的事物管理器DataSourceTransactionManager
具体代码:
package com.ccw.config;
import com.alibaba.druid.pool.DruidDataSource;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.jdbc.datasource.DataSourceTransactionManager;
import org.springframework.transaction.PlatformTransactionManager;
import javax.sql.DataSource;
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
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
//事务管理器
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource){
DataSourceTransactionManager ds = new DataSourceTransactionManager();
ds.setDataSource(dataSource);
return ds;
}
}
(2)SpringConfig
首先是写上几个注解
①:@Configuration
@Configuration:在spring的注解开发中占有很重要的地位,你当你想要定义一个配置类并交给spring管理的时候你就可以在相关类上面加这个注解
②:@ComponentScan(com.ccw.service)
@ComponentScan:组件扫描。扫描被@Controller、@Service、@Repository、@Component等注解标注的类,扫描包上的注解将组件加载到IOC容器中
③:@PropertySource(“classpath:jdbc.properties”)
@PropertySource注解用于指定资源文件读取的位置,它不仅能读取properties文件,也能读取xml文件
④:@Import({JdbcConfig.class,MyBatisConfig.class})
@Import:将该类的bean全部加载到spring容器中
⑤:@EnableTransactionManagement
开启事务支持,写了之后就可以在service接口中开启事务管理了
@Configuration
@ComponentScan({"com.ccw.service"})
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MyBatisConfig.class})
@EnableTransactionManagement
public class SpringConfig {
}
(3)SpringMvcConfig
@Configuration,@ComponentScan({“com.ccw.controller”,“com.ccw.config”})这里就不再描述了
@EnableWebMvc
在SpringMvcConfig中添加@EnableWebMvc:开启json数据转换为对象的功能
@Configuration
@ComponentScan({"com.ccw.controller","com.ccw.config"})
@EnableWebMvc
public class SpringMvcConfig {
}
(4)ServletConfig
将ServletConfig继承AbstractAnnotationConfigDispatcherServletInitializer接口,重写三个方法
ServletConfig:定义一个servlet容器启动的配置类,在里面加载spring的配置
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
//加载Spring容器
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
//加载SpringMvc容器
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
//设置哪些请求归属springMVC处理
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
//乱码处理
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter filter = new CharacterEncodingFilter();
filter.setEncoding("utf-8");
return new Filter[]{filter};
}
}
(5)MyBatisConfig
public class MyBatisConfig {
@Bean
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean.setTypeAliasesPackage("com.ccw.domain");
return factoryBean;
}
//扫描mapper
@Bean
public MapperScannerConfigurer mapperScannerConfigurer(){
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setBasePackage("com.ccw.dao");
return msc;
}
}
(6)SpringMvcSupport
这个类是干嘛的?
由于我们使用的是RESTful风格,会导致静态资源文件被拦截。
在ServletConfig中设置的SpringMvc控制器拦截所有资源,所以我们就需要专门来配置一个过滤器
设置静态资源访问过滤,当前类需要设置为配置类,并被扫描加载
配置拦截器
@Configuration
public class SpringMvcSupport extends WebMvcConfigurationSupport {
@Autowired//注入拦截器属性
private ProjectInterceptor projectInterceptor;
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
registry.addResourceHandler("/js/**").addResourceLocations("/js/");
registry.addResourceHandler("/css/**").addResourceLocations("/css/");
}
//拦截器
@Override
protected void addInterceptors(InterceptorRegistry registry) {
//所有books开头的操作全部拦截
registry.addInterceptor(projectInterceptor).addPathPatterns("/books/*");
}
}
也可以将此类与SpringMvcConfig类进行整合,方便书写