ssm常用配置

分模块构建项目

工程分层的好处:程序的通用性(提高代码的复用率),降低了代码的耦合性
特点1(继承):
----ssm_parent父工程:存放项目的所有jar包。
----ssm_web和ssm_service和ssm_dao有选择的继承jar包,并在自己的工程中使用。这样可以消除jar包重复,并锁定版本
特点2(聚合):
----ssm_web依赖于ssm_service,ssm_service依赖于ssm_dao,我们启动ssm_web,便可以访问我们的程序。
----执行安装的时候,执行ssm_parent,就可以将所有的子工程全部进行安装。
理解继承和聚合总结:
----通常继承和聚合同时使用。
· 何为继承?
----继承是为了消除重复,如果将 dao、 service、 web 分开创建独立的工程则每个工程的 pom.xml 文件中的内容存在重复,比如:设置编译版本、锁定 spring 的版本的等,可以将这些重复的 配置提取出来在父工程的 pom.xml 中定义。
· 何为聚合?
----项目开发通常是分组分模块开发, 每个模块开发完成要运行整个工程需要将每个模块聚合在 一起运行,比如: dao、 service、 web 三个工程最终会打一个独立的 war 运行。

父工程

<modules>
    <!--子工程创建后自动生成-->
    <module>ssm_model</module>
</modules>


<!--特殊属性定义,一般是版本号-->
<properties>
    <spring.version>5.0.2.RELEASE</spring.version>
</properties>

<!--dependencyManagement 不是导入jar包而是作为jar包版本管理-->
<dependencyManagement>
    <!--引入版本管理-->
    <dependencies>
        <!--spring包(核心)-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
    </dependencies>
</dependencyManagement>

<!--真正导入的包-->
<dependencies>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

子模块

<!--父工程坐标-->
<parent>
    <artifactId>day49_maven</artifactId>
    <groupId>org.example</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>ssm_dao</artifactId>

<dependencies>
    <!--导入当前项目中另外的模块-->
    <dependency>
        <groupId>org.example</groupId>
        <artifactId>ssm_model</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
    <!--mybatis-->
    <dependency>
        <groupId>org.mybatis</groupId>
        <artifactId>mybatis</artifactId>
    </dependency>

事务

<!--添加事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource"/>
</bean>

<!--配置事务通知-->
<tx:advice id="transferAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <!--哪些方法开启事务-->
        <tx:method name="set*" rollback-for="java.lang.Exception"/>
    </tx:attributes>
</tx:advice>

<aop:config>
    <!--使用AOP增强指定的切入点-->
    <aop:pointcut id="addAccountAop" expression="execution(* com.baidu.service.impl.AccountServiceImpl.*(..))"/>
    <!--将通知插入切入点-->
    <aop:advisor advice-ref="transferAdvice" pointcut-ref="addAccountAop"/>
</aop:config>

视图解析器等组件

<!--视图解析器-->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
    <property name="prefix" value="/jsp/"/>
    <property name="suffix" value=".jsp"/>
</bean>
<!--使用tomcat默认的servlet处理静态资源-->
<mvc:default-servlet-handler/>
<!--开启映射器 适配器 等组件-->
<mvc:annotation-driven>
    <mvc:message-converters>
        <!-- 处理响应中文内容乱码 -->
        <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <property name="defaultCharset" value="UTF-8" />
            <property name="supportedMediaTypes">
                <list>
                    <value>text/html</value>
                    <value>application/json</value>
                </list>
            </property>
        </bean>
    </mvc:message-converters>
</mvc:annotation-driven>

路由分发servlet

  <servlet>
	<servlet-name>dispatch</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:spring-mvc.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
	<servlet-name>dispatch</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>
  <!--解决post请求参数乱码-->
<filter>
	<filter-name>CharacterEncodingFilter</filter-name>
	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
	<!-- 配置初始化参数,指定字符集 -->
	<init-param>
		<param-name>encoding</param-name>
		<param-value>UTF-8</param-value>
	</init-param>
	<!-- 强制使用 -->
	<init-param>
		<param-name>forceEncoding</param-name>
		<param-value>true</param-value>
	</init-param>
</filter>
<filter-mapping>
	<filter-name>CharacterEncodingFilter</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

整合mybatis

<!--整合mybatis-->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <!--核心配置文件中的数据源配置-->
    <property name="username" value="root"/>
    <property name="password" value="root"/>
    <property name="url" value="jdbc:mysql:///test?characterEncoding=utf8"/>
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
</bean>
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <!--创建数据源对象-->
    <property name="dataSource" ref="dataSource"/>
    <!--核心配置文件中的pojo文件扫描-->
    <property name="typeAliasesPackage" value="com.baidu.pojo"/>
</bean>
<bean id="mapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
    <!--扫描dao接口创建代理类-->
    <property name="basePackage" value="com.baidu.dao"/>
</bean>

坐标

<dependencies>
<!--spring容器-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.0.2.RELEASE</version>
</dependency>
<!--mvc-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>5.0.2.RELEASE</version>
</dependency>
<!--整合jdbc-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-jdbc</artifactId>
  <version>5.0.2.RELEASE</version>
</dependency>
<!--整合mybatis-->
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis</artifactId>
  <version>3.5.3</version>
</dependency>
<dependency>
  <groupId>org.mybatis</groupId>
  <artifactId>mybatis-spring</artifactId>
  <version>1.3.0</version>
</dependency>
<!--mysql驱动-->
<dependency>
  <groupId>mysql</groupId>
  <artifactId>mysql-connector-java</artifactId>
  <version>5.1.6</version>
</dependency>
<!--log-->
<dependency>
  <groupId>org.slf4j</groupId>
  <artifactId>slf4j-log4j12</artifactId>
  <version>1.7.26</version>
</dependency>
<!--lombok-->
<dependency>
  <groupId>org.projectlombok</groupId>
  <artifactId>lombok</artifactId>
  <version>1.18.10</version>
  <scope>provided</scope>
</dependency>
<!--servlet与jsp配置-->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>servlet-api</artifactId>
  <version>2.5</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>javax.servlet.jsp</groupId>
  <artifactId>jsp-api</artifactId>
  <version>2.0</version>
  <scope>provided</scope>
</dependency>
<!--el表达式-->
<dependency>
  <groupId>jstl</groupId>
  <artifactId>jstl</artifactId>
  <version>1.2</version>
</dependency>
<!--aop-->
<dependency>
  <groupId>org.aspectj</groupId>
  <artifactId>aspectjweaver</artifactId>
  <version>1.8.7</version>
</dependency>
<!--Jackson配置-->
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.9.0</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
  <version>2.9.0</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  <version>2.9.0</version>
</dependency>

Jar包冲突问题

引入不同的Jar包依赖相同Jar包的不同版本

第一声明优先原则

哪个jar包在靠上的位置,这个jar包就是先声明的,先声明的jar包下的依赖包,可以优先引入项目中

路径近者优先原则

直接依赖比传递依赖路径近,你那么最终进入项目的jar包会是路径近的直接依赖包
直接依赖:项目中直接导入的jar包就是项目的直接依赖包
传递依赖(间接依赖):项目中没有直接导入的jar包,但是导入的jar包使用了

强制排除

无法通过依赖管理原则排除的,直接排除

      <!--写在dependency中-->
      <!--强制排除这个jar包导入的jar包-->
      <exclusions>
          <exclusion>
              <groupId>org.springframework</groupId>
              <artifactId>spring-core</artifactId>
          </exclusion>
      </exclusions>
posted @ 2020-12-30 19:33  笨蛋树上笨蛋果  阅读(202)  评论(0编辑  收藏  举报