SSH Spring 框架整合

Spring框架 是一个非常强大的工具, 她能够将一个项目需要的几个框架连动起来,使得开发高效又规范!

其实也不用把她想象的多么神奇,然后就认为学习起来就比较困难, 工具就是工具, 用的多了自然就会熟悉她的规则, 还有她那高效功能, 久之就会得心应手。现在来看一下她的大体使用流程 (非注解方式---后续会增加注解(简单改动)):

下图是一个ssh项目的目录结构(可以参考学习), 有几个重要的配置现在一起来看一下:

1,pom.xml( maven 依赖配置文件):动态管理项目所需各种jar包、插件等 , 前边文章有讲到。maven可以动态管理一个项目,会自动整合下载所需jar包、插件,只需要在pom.xml中粘贴上对应工具的gav坐标或者插件代码即可.

2,,app-root.xml (Spring根容器,也称Spring核心容器):是用来整合Spring框架用的一个配置,例如hibernate框架(持久化数据)、事务等都在这个文件配置(那些hibernate的配置文件已经不用了,都在这个文件配置).

3,app-servlet.xml (Spring mvc 配置文件): 她可以配置组件扫描的范围(让Spring 知道哪些可以配置注解, 可以认为管理这众多以前的Servlet文件(现在可称为控制器)), 还可以配置web相关的东西

4,web.xml  可以配置中央控制器、监听器等

一、pom.xml文件:

<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.xintouyun</groupId>
  <artifactId>ssh</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>ssh</name>
  <url>http://maven.apache.org</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.8.1</version>
      <scope>test</scope>
    </dependency>

	    <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
	<dependency>
	    <groupId>mysql</groupId>
	    <artifactId>mysql-connector-java</artifactId>
	    <version>5.1.25</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/commons-dbcp/commons-dbcp -->
	<dependency>
	    <groupId>commons-dbcp</groupId>  		<!-- 配置数据源,数据库连接设置 -->
	    <artifactId>commons-dbcp</artifactId>   
	    <version>1.4</version>
	</dependency>
	
	<dependency>
	   <groupId>org.hibernate</groupId>			<!-- hibernate 框架 -->
	   <artifactId>hibernate-core</artifactId>
	   <version>5.3.7.Final</version>			
	</dependency>

	<!-- https://mvnrepository.com/artifact/org.springframework/spring-orm -->
	<dependency>
	    <groupId>org.springframework</groupId>  <!-- Spring 核心 -->
	    <artifactId>spring-orm</artifactId>
	    <version>5.1.2.RELEASE</version>
	</dependency>

	<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
	<!-- servlet依赖: maven的基础包中没有servlet, jsp文件不能编译; Tomcat服务器中是有的 -->
	<dependency>
	    <groupId>javax.servlet</groupId>		<!-- Spring Servlet -->
	    <artifactId>javax.servlet-api</artifactId>
	    <version>4.0.1</version>    			
	    <scope>provided</scope>
	</dependency>

	<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
	<dependency>
	    <groupId>org.springframework</groupId>	<!-- 为了使用Spring-mvc 注解 -->
	    <artifactId>spring-webmvc</artifactId>  
	    <version>5.1.2.RELEASE</version>
	</dependency>

	<!-- https://mvnrepository.com/artifact/org.aspectj/aspectjweaver Aop配置 -->
	<dependency>
	    <groupId>org.aspectj</groupId>
	    <artifactId>aspectjweaver</artifactId>
	    <version>1.9.2</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
	<dependency>
	    <groupId>javax.servlet</groupId>
	    <artifactId>jstl</artifactId>
	    <version>1.2</version>
	</dependency>

  </dependencies>
  
<!-- ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++=+++++ -->  
  <build>
  	<finalName>smvc1</finalName>  <!-- 打成的War包名 -->
    <plugins>  <!-- 设置编译级别为1.8 -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      
	<plugin>
	  <groupId>org.eclipse.jetty</groupId>		<!-- jetty 嵌入式服务器 -->
	  <artifactId>jetty-maven-plugin</artifactId>
	  <version>9.4.12.v20180830</version>
 		<configuration>
 		 <scanIntervalSeconds>10</scanIntervalSeconds>
		</configuration>
	</plugin>
	
    </plugins>
  </build>
  
  
</project>

二、app-root.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	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-4.3.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd
		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.3.xsd">

<!--  -->

 	<!-- Spring配置: 组件扫描(让Spring知道 哪些可以配置注解)-->
<!--	<context:component-scan base-package="com.xintouyun.ssh"/> -->
	
	<!-- 配置数据源,数据库连接设置 -->
	<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql:///bookstore"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
        <property name="initialSize" value="5"></property>  <!-- 先定义几个连接放到连接池,这样连接速度快 -->
    </bean>
    
    <!-- 配置Sessionfactory(代替hibernate 配置)  --> <!-- 以前的Sessionfactory是用代码生成实现的,现在用bean即可 -->
    <bean id="mySessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="myDataSource"/>  <!-- 注入数据源(上边) -->
        <property name="mappingResources">   <!-- 读取hbm.xml 配置文件,实现类和表的映射  -->
            <list>
                <value>com/xintouyun/ssh/entity/User.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">   
            <value>									<!-- hibernate中需要配置的属性(方言、是否显示sql语句) -->
                hibernate.dialect=org.hibernate.dialect.MySQL55Dialect
                hibernate.show_sql=true
            </value>
        </property>
    </bean>
    
    <!--声明式事务开始+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
    <!-- 配置事务管理器 -->  <!-- 此处用以sessionfactory依赖注入(比以前代码实现方便多了) -->
    <bean id="myTxManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
        <property name="sessionFactory" ref="mySessionFactory"/><!-- 事务管理器需要依赖注入sessionFactory -->
    </bean>
    
    
        <!-- 事务通知 -->
    <tx:advice id="txAdvice" transaction-manager="myTxManager">
        <!-- 事务属性配置 -->
        <tx:attributes>
            <!-- 所有以get开头的方法 使用只读 -->
            <tx:method name="get*" read-only="true"/>
            <tx:method name="list*" read-only="true"/>
            <tx:method name="find*" read-only="true"/>
            <!-- 其他方法 使用默认事务传播(可以提交事务) propagation="REQUIRED(默认required: 若没有事务就开启一新的,有的话传递)-->
            <tx:method name="*"/>
        </tx:attributes>
    </tx:advice>
    
        <!-- AOP配置(因为要用声明式事务) -->
    <aop:config>
    	<!-- 指定哪些事务的哪些方法使用声明式事务 (现在是service 下边的都可以使用事务) -->
        <aop:pointcut id="fooServiceOperation" expression="execution(* com.xintouyun.ssh.service..*.*(..))"/>
      	<!-- 事务通知 -->
        <aop:advisor advice-ref="txAdvice" pointcut-ref="fooServiceOperation"/>  
    </aop:config>
    <!--声明式事务结束 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ -->
    
    <!-- 只是通常的bean方法 实现依赖注入(一个类一个bean,一个需要注入的属性一个property) -->
    <bean name="userDao" class="com.xintouyun.ssh.dao.impl.UserDaoImpl">
		<!-- setter注入,对象要注入的属性要有Setter方法  -->   <!-- UserDao需要依赖注入SessionFactory -->
		<property name="sessionFactory" ref="mySessionFactory"></property>
	</bean>
	
	<bean name="userService" class="com.xintouyun.ssh.service.impl.UserServiceImpl">
		<property name="userDao" ref="userDao"></property>  <!-- 依赖注入:service依赖于dao -->
	</bean>
	
</beans>

3,app-servlet配置文件 ( Spring-mvc配置文件 )

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	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-4.3.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
 	
 	<!-- Spring配置: 组件扫描(让Spring知道 哪些可以配置注解)-->
	<context:component-scan base-package="com.xintouyun.ssh"/>
	
	<!-- 支持jsp jstl的视图解析器 -->
	<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
	    <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
	    <property name="prefix" value="/WEB-INF/views/"/>
	    <property name="suffix" value=".jsp"/>
	</bean>
</beans>

4,web.xml 配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
  
  <!-- ServletContext 监听器:容器启动的时候自动执行 
  (此处可以 让它读取Spring配置文件,实例化spring容器(root容器 (servlet容器依赖 root容器)  )) -->
   <listener>
       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
   </listener>

	<!--  上边监听器使用下边参数,指定Spring配置文件的位置(classpath),容器启动的时候读取app-root.xml配置文件 -->
   <context-param>
       <param-name>contextConfigLocation</param-name>
       <param-value>classpath:app-root.xml</param-value>
   </context-param>
 
 
 <!-- 中央控制器 --> <!-- servlet容器 可以访问root中的bean,反过来不行 -->
 <display-name>spring-mvc</display-name>  
  <servlet>
    <servlet-name>ssh</servlet-name>			
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:app-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>ssh</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
</web-app>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值