基于Java配置类的SSM整合

1. 创建MyApplicationContext配置类代替Spring的总配置文件

  1. 扫描包,让注解生效

  2. 导入其他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. 框架已经搭建完成,接下来就是使用注解完成业务操作

目录:

目录

posted @ 2021-11-23 09:49  恸的池塘  阅读(249)  评论(0编辑  收藏  举报