基于Java配置类的SSM整合
1. 创建MyApplicationContext配置类代替Spring的总配置文件
-
扫描包,让注解生效
-
导入其他spring配置类
@Configuration // 表示这是一个spring的配置类
@ComponentScan({"lang.service","lang.aspect"}) //扫描指定的包,让包下的注解生效
@Import({MybatisConfig.class}) // 导入其他的配置类
// @ImportResource("beans.xml") //引入spring的配置文件
@EnableAspectJAutoProxy //等同于在配置文件中配置<aop:aspectj-autoproxy/> // 开启spring对注解AOP的支持
public class MyApplicationContext {
// 配置事务管理器
@Bean("transactionManager")
public DataSourceTransactionManager createDataSourceTransactionManager(DataSource dataSource){
DataSourceTransactionManager transactionManager = new DataSourceTransactionManager();
transactionManager.setDataSource(dataSource);
return transactionManager;
}
}
2. 创建mybatis的配置类MybatisConfig
// 这儿使用druid数据源
// 借助成员属性使用注解去获取资源文件中的值时,类需要有注解:@Configration
// 出现错误:使用注解@Value()无法注入到值
网络解释:
是因为这个类MapperScannerConfigurer实现BeanDefinitionRegistryPostProcessor接口, 导致后续spring容器执行的一些问题,
MapperScannerConfigurer这个Bean有问题, 应该不是这么设置的, 因此又找文档, 最后找到一个注解@MapperScan, 这个注解就是用来替换扫描mapper接口的配置的, 加上这个注解后, MapperScannerConfigurer这个Bean就不用我们手动创建了,
@Configuration
@PropertySource("classpath:dataSource.properties")
@MapperScan("lang.dao")
public class MybatisConfig {
@Value("${jdbc.driver}")//在Value注解中通过${}引用属性文件中的字段值
private String driver ;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.user}")
private String username;
@Value("${jdbc.password}")
private String password;
//配置数据源
@Bean("dataSource")
public DataSource createDruidDataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
// 还可以设置其他的配置
return dataSource;
}
// 注入SqlSessionFactory
@Bean("sqlSessionFactory")
public SqlSessionFactoryBean createSqlSessionFactory(DataSource dataSource){
SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();
sqlSessionFactory.setDataSource(dataSource);
return sqlSessionFactory;
}
// 配置扫描,自动注入dao接口的代理对象
//照这个提示来看, 还是MapperScannerConfigurer这个Bean有问题, 应该不是这么设置的, 因此又找文档, 最后找到一个注解@MapperScan, 这个注解就是用来替换扫描mapper接口的配置的, 加上这个注解后, MapperScannerConfigurer这个Bean就不用我们手动创建了
// 配置这个bean会导致@Value()不能够注入到值
/*@Bean
public MapperScannerConfigurer createMapperScannerConfigurer(){
MapperScannerConfigurer scan = new MapperScannerConfigurer();
scan.setSqlSessionFactoryBeanName("sqlSessionFactory"); // 注入sqlSessionFactory
scan.setBasePackage("lang.dao"); // 配置需要扫描的mapper包
return scan;
}*/
}
3.创建SpringMvc的配置类代替web.xml
// spring 官方推荐使用AbstractAnnotationConfigDispatcherServletInitializer
public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
// 返回需要加载的Spring的配置文件
return new Class[]{MyApplicationContext.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
//指定DispatcherServlet加载的SpringMVC配置类
return new Class[]{SpringMvcConfig.class};
}
@Override
protected String[] getServletMappings() {
//指定DispatcherServlet拦截映射地址
return new String[]{"/"};
}
}
4. 创建SpringMvc的配置类,用来配置处理器、映射器和视图解析器
@Configuration
@ComponentScan("lang.controller") // 扫描springmvc的处理器
@EnableWebMvc//开启SpringMVC驱动 // 处理器和映射器
public class SpringMvcConfig implements WebMvcConfigurer {
// 配置视图解析器
@Override
//ViewResolverRegistry:用于添加注册视图解析器的
public void configureViewResolvers(ViewResolverRegistry registry) {
//创建视图解析器对象
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
//调用方法设置前缀和后缀
viewResolver.setPrefix("/pages/");
viewResolver.setSuffix(".html");
registry.viewResolver(viewResolver);//将创建的视图解析器注册到SpringMVC配置中
}
}
5. 框架已经搭建完成,接下来就是使用注解完成业务操作
目录: