maven实现spring框架配置

认识maven

maven是便于管理jar包依赖的一种项目管理工具,可以构建java的普通项目和web项目
这里主要是了解在maven的配置和实现在eclipse环境下构建一个web项目


一、下载maven

下载地址:跳转官方下载
下载apache-maven 是用来能够修改配置文件,以及作为指定的本地仓库的作用而使用
在这里插入图片描述

二、在eclipse中搭建maven项目

1.创建项目

在这里插入图片描述

2.配置项目

1.项目创建后就会在项目中包如下错误
在这里插入图片描述这是要求我们需要创web.xml文件,达到连接服务器的要求
在这里插入图片描述
然后我们进行web.xml文件的配置,网上有很多配置,下面我贴出我的配置以及对web.xml文件配置的理解
web.xml用来配置web容器中对servletConext的各部分的管理机制

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 
	xmlns="http://java.sun.com/xml/ns/javaee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
	
	<!-- 容器将<context-param>中的信息转化为键值对,并交给ServletContext.  
	spring框架必须定义ContextLoaderListener,在启动Web容器时,自动装配Spring applicationContext.xml的配置信息
-->
	<context-param>
		<!-- 指定Spring上下文配置文件 -->
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:applicationContext.xml</param-value>
		<!-- 将web与springmvc联系起来,创建spring容器 -->
	</context-param>
	<listener>	<!-- 监听器,开启服务器后就立刻运行 -->
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

<!-- 使用字符编码过滤器,将所有经过的编码文件改为UTF-8编码模式 -->
<filter>
	<filter-name>encoding</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>
</filter>
<filter-mapping>
	<filter-name>encoding</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- dispatcherServlet:前端控制器(中央控制器) -->
<servlet>
	<servlet-name>springmvc</servlet-name>
	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<!-- servlet范围内的参数,只能在servlet的init()方法中取得 -->
	<init-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:mvc.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
 </servlet-mapping>
 
<servlet-mapping>
	<servlet-name>default</servlet-name>
	<url-pattern>*.js</url-pattern>
	<url-pattern>*.css</url-pattern>
	<url-pattern>*.html</url-pattern>
	<url-pattern>/imgs/*</url-pattern>
</servlet-mapping>
 
</web-app>

可以简易的理解为web容器(如tomcat)包含整个项目,其中有servlet容器和spring容器两大类,其中

  • spring容器{又包含了service、dao的bean层和springMVC(controller控制)层}

  • servlet容器包含servlet对象。

1.开始运行服务器时,tomcat就为每一个应用创建了servletConext容器,后读取web.xml配置信息。< context-param >可以将读取到的信息(ApplicationContext)在ServletContext中以键值对的形式保存。
2.通过< servlet >< servlet-mapping >标签规定springmvc(前端/中央控制器)的通过要求。< init-param >获取servlet范围内的参数

3.在eclipse中更改默认maven配置和本地仓库

  1. 修改自己下载的apache-maven 文件下的conf下的setting.xml文件
    在这里插入图片描述

  2. 配置eclipse
    在这里插入图片描述在这里插入图片描述

4.pom.xml文件配置(对项目所需要的依赖进行导包)

可以在:跳转全球maven仓库, 较全,可能会较慢
跳转国内阿里仓库,推荐使用
这些仓库中找到你需要的依赖,并将文件对应的依赖放入pom.xml中,maven将从配置的镜像路径下找到并自动导包,也可以通过pom文件类实现包依赖的问题

<project xmlns="http://maven.apache.org/POM/4.0.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.study.it</groupId>
  <artifactId>wetalk</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  
  <properties><!-- 内容为  .verson为下面jar包的版本 -->
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<spring.version>4.3.7.RELEASE</spring.version>
		<mybatis.version>3.4.1</mybatis.version>
	</properties>

	<dependencies>
		<!-- mybatis 的自动分页功能包 -->
		<dependency>
		    <groupId>com.github.pagehelper</groupId>
		    <artifactId>pagehelper</artifactId>
		    <version>5.1.3</version>
		</dependency>
		
		<!-- 用来SSM使用注解的验证功能(如过滤器那般) -->
		<dependency>
	    	<groupId>org.hibernate.validator</groupId>
		    <artifactId>hibernate-validator</artifactId>
		    <version>RELEASE</version>
		</dependency>
		<dependency>
		    <groupId>javax.validation</groupId>
		    <artifactId>validation-api</artifactId>
		    <version>1.1.0.Final</version>
		</dependency>
		<!-- 阿里fast json -->
		<dependency>
	        <groupId>com.alibaba</groupId>
	        <artifactId>fastjson</artifactId>
	        <version>1.2.13</version>
		</dependency>
		
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<!-- 实现AOP所依赖的包 -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.8.10</version>
		</dependency>
		<!-- spring工厂空间 
		主要实现:实现 依赖注入、事务管理、Web应用程序、数据访问、消息传递、测试和更多的核心支持。 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-expression</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-orm</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-oxm</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc-portlet</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.version}</version>
			<scope>test</scope>
		</dependency>

		<!--springMvc注解验证支持 -->
		<dependency>
			<groupId>com.fasterxml.jackson.core</groupId>
			<artifactId>jackson-databind</artifactId>
			<version>2.6.1</version>
		</dependency>
		<dependency>
			<groupId>com.fasterxml</groupId>
			<artifactId>classmate</artifactId>
			<version>1.3.3</version>
		</dependency>
		<dependency>
			<groupId>javax.validation</groupId>
			<artifactId>validation-api</artifactId>
			<version>1.1.0.Final</version>
		</dependency>

		<dependency>
			<groupId>org.hibernate</groupId>
			<artifactId>hibernate-validator</artifactId>
			<version>5.3.5.Final</version>
		</dependency>
		
		<!-- mysql支持 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>8.0.16</version>
		</dependency>
		
		<!--连接池支持 -->
		<dependency>
			<groupId>com.mchange</groupId>
			<artifactId>c3p0</artifactId>
			<version>0.9.5.2</version>
		</dependency>

		<!-- MyBatis支持 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>${mybatis.version}</version>
		</dependency>
		<dependency>
		    <groupId>org.mybatis</groupId>
		    <artifactId>mybatis-spring</artifactId>
		    <version>1.3.0</version>
		</dependency>
		
		
		<!-- cglib动态代理、 javassist用来 处理 Java 字节码的类库 -->
		<dependency>
			<groupId>cglib</groupId>
			<artifactId>cglib</artifactId>
			<version>3.1</version>
		</dependency>
		<dependency>
			<groupId>org.javassist</groupId>
			<artifactId>javassist</artifactId>
			<version>3.17.1-GA</version>
		</dependency>
		
		<!-- servlet支持 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.1.0</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet.jsp</groupId>
			<artifactId>javax.servlet.jsp-api</artifactId>
			<version>2.2.1</version>
		</dependency>
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>
		<!-- 文件上传支持 -->
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.1</version>
		</dependency>
		<dependency>
			<groupId>commons-lang</groupId>
			<artifactId>commons-lang</artifactId>
			<version>2.6</version>
		</dependency>
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-lang3</artifactId>
			<version>3.5</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.5</version>
		</dependency>
		<!-- 日志类依赖 -->
		<dependency>
		    <groupId>log4j</groupId>
		    <artifactId>log4j</artifactId>
		    <version>1.2.17</version>
		</dependency>
	</dependencies>
  
</project>

5. SSM架构下配置文件

需要配置,applicationContext.xml , mvc.xml 和 mybatis-config.xml
这些命名都是大部分人认同的都可以修改的。

  1. mvc.xml(在web.xml中通过servlet-init向mvc.xml取值)
    web取值mvc
mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
     xmlns:context="http://www.springframework.org/schema/context"
     xmlns:aop="http://www.springframework.org/schema/aop"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd
        http://www.springframework.org/schema/aop 
        http://www.springframework.org/schema/aop/spring-aop.xsd
        ">
  	<!-- 	控制所有的 ui下的控制器对象的配置
		spring可以自动去扫描base-package下面或者子包下面的java文件,
		如果扫描到有@Component @Controller @Service @Repository等这些注解的类,则把这些类注册为bean 
	-->
    <context:component-scan base-package="com.study.it.ui"/>
	<mvc:annotation-driven/>
	<!-- 配置spring视图解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
		p:prefix="/WEB-INF/page/" p:suffix=".jsp"
		p:viewClass="org.springframework.web.servlet.view.JstlView">
	</bean>
	<!-- 上传文件 -->
	<bean id="multipartResolver"
		class="org.springframework.web.multipart.commons.CommonsMultipartResolver"
		p:defaultEncoding="UTF-8" p:maxUploadSize="32505856"
		p:maxInMemorySize="4096"/>
		
</beans>
  1. applicationContext.xml
    在启动Web容器时,自动在servletContext中装配Spring applicationContext.xml的键值对信息
    在这里插入图片描述
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="http://www.springframework.org/schema/beans" 
  xmlns:aop="http://www.springframework.org/schema/aop"
  xmlns:context="http://www.springframework.org/schema/context" 

  xmlns:tx="http://www.springframework.org/schema/tx"
  xmlns:cache="http://www.springframework.org/schema/cache"
  xmlns:p="http://www.springframework.org/schema/p"
  xsi:schemaLocation="http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
     http://www.springframework.org/schema/aop
     http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
     http://www.springframework.org/schema/context
     http://www.springframework.org/schema/context/spring-context-4.0.xsd
     http://www.springframework.org/schema/tx
     http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
     http://www.springframework.org/schema/cache 
     http://www.springframework.org/schema/cache/spring-cache-4.0.xsd">
	
	<!-- 
	@Component         把对象加入ioc容器,对象引用名称是类名,第一个字母小写
	@Component(“name”) 把指定名称的对象,加入ioc容器
	@Repository        主要用于标识加入容器的对象是一个持久层的组件(类)
	@Service           主要用于标识加入容器的对象是一个业务逻辑层的组件
	@Controller        主要用于标识加入容器的对象是一个控制层的组件
	@Resource          注入属性(DI), 会从容器中找对象注入到@Resource修饰的对象上
	@Autowired         注入属性(DI), 会从容器中找对象注入到@Autowired修饰的对象上
	-->
	<!-- 
		spring可以自动去扫描base-package下面或者子包下面的java文件,
		如果扫描到有@Autowride @Qualifier @Resource 等注解类
	-->
	<context:component-scan base-package="com.study.it"/>
	<bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location" value="classpath:jdbc.properties"/>
	</bean>
	
	
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <!-- 基本信息 -->        <!-- 可以将mybatis-config.xml中的信息去除了 -->
        <property name="jdbcUrl" value="${url}"></property>
        <property name="driverClass" value="${driver}"></property>
        <property name="user" value="${username}"></property>
        <property name="password" value="${password}"></property>
        <!-- 其他配置 -->
        <!--初始化时获取三个连接,取值应在minPoolSize与maxPoolSize之间。Default: 3 -->
        <property name="initialPoolSize" value="3"></property>
        <!--连接池中保留的最小连接数。Default: 3 -->
        <property name="minPoolSize" value="3"></property>
        <!--连接池中保留的最大连接数。Default: 15 -->
        <property name="maxPoolSize" value="15"></property>
        <!--当连接池中的连接耗尽的时候c3p0一次同时获取的连接数。Default: 3 -->
        <property name="acquireIncrement" value="3"></property>
        <!-- 控制数据源内加载的PreparedStatements数量。如果maxStatements与maxStatementsPerConnection均为0,则缓存被关闭。Default: 0 -->
        <property name="maxStatements" value="8"></property>
        <!-- maxStatementsPerConnection定义了连接池内单个连接所拥有的最大缓存statements数。Default: 0 -->
        <property name="maxStatementsPerConnection" value="5"></property>
        <!--最大空闲时间,1800秒内未使用则连接被丢弃。若为0则永不丢弃。Default: 0 -->
        <property name="maxIdleTime" value="1800"></property>
    </bean>

	<!-- 代替咱们土制的MyBatisUtil,(sessionFactory)获得连接 -->
	<bean id="sessionFactory"
		class="org.mybatis.spring.SqlSessionFactoryBean"
		 p:dataSource-ref="dataSource"
		 p:configLocation="classpath:mybatis-config.xml"
		 p:mapperLocations="classpath:mapper/*.xml"/>	
	<!-- p:mapperLocations:"classpath:Mapper.xml所在的位置" -->
	
	<!-- ccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc -->
	
	<!-- 不用再配dao,但是注入给的时候,缺少名字(接口名小写开头typeDao),只能采用byType的自动注入  -->
 <!--   自动创建实现类,并注入spring容器,代替MybatisUtil.getSession().getMapper(GoodsDao.class); -->
  <!-- 等效于<bean  class="com.study.it.dao.impl.mybatis.UserDaoImpl"/> -->
 	 
     <bean id="mybatisScanner"
     	class="org.mybatis.spring.mapper.MapperScannerConfigurer"
     	p:sqlSessionFactoryBeanName="sessionFactory"
     	p:basePackage="com.study.it.dao"/><!-- 接口所在的包 -->
	
	
	<!-- xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx -->
	 
	<!--5、Spring 配置声明式事物 -->
	<!-- 相当于TxManager事务管理器 -->
	<bean id="transactionManager"
		class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
		p:dataSource-ref="dataSource" />
	
	<!-- 相当于是我们的TranAop ,配置事务范围(切面的范围)
		使用tx标签配置的拦截器
	-->
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>	
			<tx:method name="login" read-only="true" />
			<tx:method name="find*" read-only="true" />				<!-- 规定DAO中方法使用的开头,有利于优化处理方式 -->
			<tx:method name="select*" read-only="true" />
			<tx:method name="add*" propagation="REQUIRED" />
			<tx:method name="edit*" propagation="REQUIRED" />
			<tx:method name="remove*" propagation="REQUIRED" />
			<tx:method name="del*" propagation="REQUIRED" />
			<tx:method name="*" propagation="NEVER" />
		</tx:attributes>
	</tx:advice>
	<!-- 定义切面 -->
	<aop:config>
		<!-- 此时配置的切点在Service层以impl为结尾的类中,
		方法命名需要按照以上advice通知点开头命名。 -->
		<aop:pointcut expression="execution(public * com.study.it.service.impl.*Impl.*(..))" id="pt"/>
		<!-- aop的上下顺序影响了谁包裹谁的作用 -->
		<aop:advisor advice-ref="txAdvice" pointcut-ref="pt"/>
		
	</aop:config>
</beans>
  1. mybatis-config.xml()
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<!-- 配置所有有关mapper数据库的操作 -->
	<settings>
		<!-- 开启全局的懒(延迟)加载   !!!延迟加载最好不要与缓存共存 -->
		<setting name="lazyLoadingEnabled" value="true" />
		<!-- 关闭立即加载,其实不用配置,默认为false -->
		<setting name="aggressiveLazyLoading" value="false" />
		<!-- 打开二级缓存  需要基础类继承Serializable达成可序列化 和 mapper中建立标签cache  -->
    	<setting name="cacheEnabled" value="true"/>
    	
	    <setting name="logImpl" value="LOG4J"/>
	</settings>
	
	<!-- 加载数据库所要要类属性信息 -->
	<typeAliases>
	   <package name="com.study.it.entity"/>
	</typeAliases>
	
	<!-- 配置数据库切面拦截器 ,用来做分页语句 -->
	<plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <!-- 设置数据库类型 Oracle,Mysql,MariaDB,SQLite,Hsqldb,PostgreSQL六种数据库-->
            <property name="helperDialect" value="mysql"/>
        </plugin>
	</plugins>
</configuration>

总结

最后我将自己对SSM框架下的容器及运行流程的理解,,,希望有大佬能对刚入门我这不成熟的理解加以纠正,提前谢谢各位大佬的指点。。

项目的运行

  • 容器
    要了解SSM框架运行就需要首先了解容器:
    web容器(服务器)中主要为servlet容器和spring容器,并且两大容器不能直接进行数据交互。
    • serlvet容器
      • servlet有三大域对象,其中application(servletContext) .可以说是每一个web项目各自的总servlet空间,又称为servlet的上下文环境
      • servlet是对servlet对象的管理
    • spring容器 (管理了整个项目运行的web层,业务层,dao层和持久层)
      • springMVC处理
        在这里插入图片描述
      • 应用上下文webapplicationContext

springMVC的中央处理器(前端处理器DispatcherServlet)的功能继承自servlet,所以首先经过Servlet容器管理对象的功能后转接到springMVC容器处理,又因为serlvet不能获取spring注入的依赖,因此进行在启动使使用监听器提前运行的效果对Servlet进行spring注入(将IOC容器的映射以键值对的形式存入ServletContext全局上下文中)。
在这里插入图片描述java小新人文章(带着新人简单看看servlet到springmvc)

初始化流程理解

#TOC

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值