Spring framework(1):框架构建&配置文件

来源:互联网 发布:java中的方法 编辑:程序博客网 时间:2024/06/07 01:47

Spring 框架概况



Spring 框架主要可以分为以下模块:
1.Core Container(核心模块)
  • Core :实现了IOC功能,用配置的方式进行类于类之间的以阿里关系描述,用IOC容器负责依赖类之间的创建,拼接,管理,获取等工作;
  • Bean :提供了 BeanFactory,是Spring Core的核心接口,实现了IOC容器的核心功能;
  • Context :拓展了 BeanFactory 的功能,添加了许多接口功能,ApplicationContext 是 Context 的核心接口;
  • SpEL :EL 表达式模块,该表达式用于查询和管理运行时的对象,支持/获取对象的属性,调用对象方法等,可以通过表达式串与 IOC 容器进行交互;
2.Data Access / Integration(数据访问和集成模块)
Spring 通过模板化技术对各种数据访问技术进行和薄层封装,是数据访问得到了极大的简化,由此建立了和数据形式及访问技术无关的同意的DAO层,该模块提供了对 JDBC,ORM,OXM,JMS,事务的支持;
3. Web(MVC/Remoting)(网络层模块)
  • Web该模块建立在 Application Context 模块之上,提供基本的面向Web的集成功,如使用 servlet listener 和 application context 初始化 IOC 容器;
  • Web-MVC:该模块实现了一套类似于Structs的MVC框架,同样该MVC框架也是基于Servlet的;
  • Web-Socket:提供了一个在Web应用中高效/双向的通信,用于客户端和服务器之间的高频低延时的信息交换(一般应用在在线交易,游戏,协作,数据可视化等);
  • Web-Portlet:提供了Portlet的MVC实现环境;
4.其他模块
  • AOP:提供了面向切面编程方式的支持,提供了满足 AOP Alliance 规范的实现;
  • Aspects:提供了对于 AspectJ 这种 AOP 语言级别的框架的集成支持;
  • Instrumentation:支持 Java5.0 引入的 java.lang.instrument ,允许在 JVM 启动时启动一个代理类,通过该类在运行期修改类的字节码,从而改变一个类的功能,以实现AOP的功能;
  • Messaging:用于对 WebSsocket 的 STOMP 协议提供支持;
  • Testing:用于支持 JUnit 或 TestNG 测试框架的集成;



Spring 各个模块需要引入的包

Spring在工程中的依赖导入时,在需要哪一个子模块,就导入该模块即可,一般核心模块是必须导入的,导入方式建议使用Maven,Gradle等工程管理框架;
1. Core Container
 
spring-core                 //支持core模块
spring-beans                //支持bean模块
spring-context              //支持context模块
spring-context-support
spring-expression            //支持SpEL模块
2. Aop / Instrumentation
 
spring-aop                  //支持AOP模块
spring-aspects              //支持ASpects模块
spring-instrument           //支持Instrumentation模块
spring-instrument-tomcat     //支持Tomcat环境的Instrumetation模块
3. Data / Integration
 
spring-jdbc          //支持JDBC模块
spring-orm           //支持ORM模块
spring-oxm           //支持OXM模块
spring-tx            //支持tranasction模块
spring-jms           //支持JMS模块
4. Web
 
spring-web                //支持MVC模块
spring-webmvc             //支持MVC模块
spring-webmvc-portlet     //支持MVC的protlet模块
spring-websocket          //支持websocket模块
5. test
 
spring-test
6. Messaging
 
spring-messaging



文件结构

一个示例的spring工程文件结构(使用gradle构建):

 
testSpring    //项目根目录
   src    
  |    main
  |   |     java   //源码目录
  |   |    |    com.assad   
  |   |    |         domain  //领域对象(Domain Object),领域对象使对象对数据表的操作以对象的方式
  |   |    |        |   LoginLog.java
  |   |    |        |   User.java
  |   |    |         dao     //DAO层,持久化层
  |   |    |        |   LoginLogDao.java
  |   |    |        |   UserDao.java
  |   |    |         service  //Service层,业务层
  |   |    |        |    UserService.java
  |   |    |         web      //Web层,展现层
  |   |    |             LoginCommand.java
  |   |    |             LoginController.java
  |   |     resources   //资源目录
  |   |    |    applicationContext.xml   //spring配置文件(可以任意命名)
  |   |    |    log4j2.xml
  |   |     webapp     
  |   |        WEB-INF
  |   |       |    jsp   
  |   |       |   |    login.jsp
  |   |       |   |    main.jsp
  |   |       |    assad-servlet.xml    //spring-mvc 配置文件
  |   |       |    web.xml             //java web 配置文件
  |   |        index.jsp
  |    test   //单元测试
  |       java
  |          com.assad
  |               service
  |                    UserServiceTest.java
   build.gradle   //gradle构建脚本
示例代码地址:https://gitee.com/assad/springframe-test-login-demo



spring 配置文件

applicationContext.xml

Spring IOC,AOP,DAO 等核心功能的配置文件,一个示例的 applicationContext.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:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
       xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation=... />
    <!-- 扫描类包,将标注Spring注解的类自动转化Bean,同时完成Bean的注入 -->
    <context:component-scan base-package="com.assad.dao" />
    <context:component-scan base-package="com.assad.service" />
    <!-- 装配DAO层 -->
    <!-- 配置数据源/连接池 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
          p:driverClassName="com.mysql.jdbc.Driver"
          p:url="jdbc:mysql://127.0.0.1:3306/test_spring"
          p:username="root"
          p:password="1234"/>
    <!-- 配置jdbc模板 -->
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
          p:dataSource-ref="dataSource"/>
    <!-- 装配Service层 -->
    <!-- 配置事务管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
          p:dataSource-ref="dataSource"/>
    <!-- 通过AOP配置提供事务增强,让service包下所有Bean的所有方法拥有事务-->
    <aop:config proxy-target-class="true">
        <aop:pointcut id="serviceMethod"
                      expression="(execution(* com.assad.service..*(..))) and
                       (@annotation(org.springframework.transaction.annotation.Transactional))" />
        <aop:advisor pointcut-ref="serviceMethod" advice-ref="txAdvice" />
    </aop:config>
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="*" />
        </tx:attributes>
    </tx:advice>
</beans>

连接池配置
其中配置连接池,常用的连接池有:DBCP连接池,C3P0连接池,JNDI连接池等;
  • DBCP连接池
依赖引入:commons-dbcp:commons-dbcp
配置文件中的对应配置:
 
   <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"
          p:driverClassName="com.mysql.jdbc.Driver"                  //配置数据库驱动类
          p:url="jdbc:mysql://127.0.0.1:3306/test_spring"            //配置数据库URL
          p:username="root"                                          //配置访问口令
          p:password="1234"/>
  • CP30连接池
依赖引入:com.mchange:c3p0
对应配置:
 
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"   destroy-method="close">         
     p:driverClass="oracle.jdbc.driver.OracleDriver" 
     p:jdbcUrl="jdbc:oracle:thin:@localhost:1521:test_spring"         
     p:user="admin"      
     p:password="1234"/>   

web.xml

配置 Spring 的启动容器和相关行为;
 
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <!-- 从类路径下加载Spring配置文件-->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    <!--启动Spring容器的监听器,应用以上的上下文参数获取Spring配置文件地址-->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- 指定 Spring MVC 的主控 Servlet,对应 assad-servlet.xml 的Spring MVC 配置文件-->
    <servlet>
        <servlet-name>assad</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <load-on-startup>3</load-on-startup>
    </servlet>
    <!-- 指定被 assad Servlet 截获的页面为.html(伪装后的jsp页面,普通静态页面标记为.htm)-->
    <servlet-mapping>
        <servlet-name>assad</servlet-name>
        <url-pattern>*.html</url-pattern>
    </servlet-mapping>
</web-app>

assad-servlet.xml

配置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:context="http://www.springframework.org/schema/context" xmlns:p="http://www.springframework.org/schema/p"
       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">
    <!-- 扫描web包,将标注Spring注解的类自动转化Bean,同时完成Bean的注入-->
    <context:component-scan  base-package="com.assad.web" />
    <!-- 配置视图解析器,将 ModelAndView及字符串解析为具体的页面-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
          p:viewClass="org.springframework.web.servlet.view.JstlView"
          p:prefix="/WEB-INF/jsp/"
          p:suffix=".jsp"/>
</beans>

 
原创粉丝点击