SSM框架整合(基于java方式的配置)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z498596750/article/details/86672248

spring整合框架的方式分为xml配置文件和java配置两种方式,这里介绍的是以java配置的方式。以下是maven需要导入的jar包。

<dependencies>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>3.1.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc-portlet</artifactId>
            <version>4.3.10.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.0</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
        <dependency>
            <groupId>jstl</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>3.2</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.6.9</version>
        </dependency>
        <dependency>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib-nodep</artifactId>
            <version>2.2</version>
        </dependency>
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>

        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.3</version>
        </dependency>

        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.15</version>
            <scope>runtime</scope>
        </dependency>

    </dependencies>

首先是spring和mvc的整合,需要创建一个配置类继承 AbstractAnnotationConfigDispatcherServletInitializer 这个类,并实现他的一些方法。代码如下:

public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
    /**
     *
     * spring配置,通过创建的RootConfig来替代spring-context文件
     * */
    protected Class<?>[] getRootConfigClasses() {
        return new Class[]{RootConfig.class};
    }

    /**
     *
     * mvc配置,通过创建的WebConfig来替代spring-mvc文件
     * */
    protected Class<?>[] getServletConfigClasses() {
        return new Class[]{WebConfig.class};
    }

    /**
     *
     * 配置web请求方式
     * */
    protected String[] getServletMappings() {
        return new String[]{"/"};
    }

    /**
     *
     * 针对dispatcherServlet添加过滤器
     * */
    @Override
    protected Filter[] getServletFilters() {
        CharacterEncodingFilter filter=new CharacterEncodingFilter();
        filter.setEncoding("UTF-8");
        filter.setForceEncoding(true);
        return new Filter[]{filter};
    }


}

然后再创建RootConfig和WebConfig这两个配置文件,

@Configuration     //给这个类加上configuration注解,表明这个类是一个配置类
@ComponentScan(basePackages = {"service.impl","dao"},
        excludeFilters ={
                @ComponentScan.Filter(type = FilterType.ANNOTATION,value = EnableWebMvc.class)
        } )    //开启自动装配的注解,这里针对service的实现类和dao接口。
@EnableAspectJAutoProxy
@MapperScan(basePackages = "dao")  //开启针对mapper接口的注入扫描
public class RootConfig {
        /**
         * 切面不能切controller      //这里是一个测试的切面
         * */
        @Bean
        public TestAop testAop(){ return new TestAop(); }

        /**
         *
         * 配置数据源
         * */
        @Bean
        public DataSource dataSource() throws PropertyVetoException {
                ComboPooledDataSource dataSource=new ComboPooledDataSource();
                dataSource.setDriverClass("com.mysql.jdbc.Driver");
                dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/learn");
                dataSource.setUser("root");
                dataSource.setPassword("123456");
                dataSource.setInitialPoolSize(10);
                dataSource.setMinPoolSize(10);
                dataSource.setMinPoolSize(100);
                return dataSource;
        }

        @Bean
        public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
                SqlSessionFactoryBean sqlSessionFactoryBean=new SqlSessionFactoryBean();
                sqlSessionFactoryBean.setDataSource(dataSource);
                sqlSessionFactoryBean.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath*:mapper/*Mapper.xml"));
                sqlSessionFactoryBean.setTypeAliasesPackage("entity");
                return sqlSessionFactoryBean.getObject();
        }
}
@Configuration
@EnableWebMvc   //表明这是mvc的配置文件,一般@Enable为开头的注解通过后边的单词就可以见名知意
@ComponentScan(basePackages = {"controller"})
public class WebConfig extends WebMvcConfigurerAdapter {
    /**
     * 配置视图解析器
     * */
    @Bean
    public ViewResolver viewResolver(){
        InternalResourceViewResolver resolver=new InternalResourceViewResolver();
        resolver.setPrefix("WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }

     /**
     *
     * 配置静态资源访问路径
     * */
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resource/**").addResourceLocations("/WEB-INF/static/");
    }

    /**
     *  针对静态资源的处理
     * */
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    /**
     *  国际化配置信息源
     * */
    @Bean
    public MessageSource messageSource(){
        ReloadableResourceBundleMessageSource messageSource=new ReloadableResourceBundleMessageSource();
        messageSource.setBasename("WEB-INF/international/message");
        messageSource.setDefaultEncoding("UTF-8");
        messageSource.setCacheSeconds(10);
        return messageSource;
    }

    /**
     *
     * 配置上传文件
     * */
    @Bean
    public MultipartResolver multipartResolver(){
        CommonsMultipartResolver multipartResolver=new CommonsMultipartResolver();
        multipartResolver.setDefaultEncoding("UTF-8");
        return multipartResolver;
    }




}

如果需要在web.xml中做一些配置,则还需要实现WebApplicationInitializer接口,示例代码如下:

public class LogConfig implements WebApplicationInitializer {

    /**
    *
    *通过实现onStartup方法,并通过servletContext这个参数可以为项目初始化监听器、过滤器以及    
    *servlet,还可以为项目设置初始化属性以及参数,以下就是为项目配置log4j日志插件的具体代码。
    */
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.setAttribute("log4jConfigLocation","resources/log4j.properties");
        servletContext.addListener(Log4jConfigListener.class);
    }
}

回来RootConfig中的测试aop,示例代码如下:

@Aspect    //通过这个注解表明这个类是一个自定义的切面类。
public class TestAop {
    //这里是这个切面要切的方法,也就是切点
    @Pointcut("execution(* service.impl.UserServiceImpl.insert(..))")
    public void insert(){

    }

    //这里是针对insert方法做的环绕通知
    @Around("insert()")
    public void huanraoAop(ProceedingJoinPoint proceedingJoinPoint){
        System.out.println("方法执行之前");
        try {
            proceedingJoinPoint.proceed();
        } catch (Throwable throwable) {
            throwable.printStackTrace();
        }
        System.out.println("方法执行之后");
    }
}

接下来回到WebConfig中配置的国际化,需要在web-inf下的international创建message.properties文件,以下是文件测试内容

hys=6666666!!!!!

然后需要在jsp中导入标签,具体代码如下:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1><spring:message code="hys"/></h1>
<form enctype="multipart/form-data" method="post" action="/save">
    <input type="file" name="file"/>
    <input type="submit" title="提交"/>
</form>
</body>
</html>

到这里,还需要对mapper的xml文件做一下重构,因为是maven创建的项目,部署到tomcat后,xml并不会被编译,这会导致mybatis的异常,要解决这个问题只需在pom的build标签下添加如下代码:

        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>mapper/*.xml</include>
                </includes>
            </resource>
        </resources>

这样,SSM就算是整合成功了,项目地址。https://github.com/13944487443/Spring-mvc-mybatis-

猜你喜欢

转载自blog.csdn.net/z498596750/article/details/86672248