一、项目分层
1. 三层架构
在 JavaEE 开发中,几乎全都是基于 B/S 架构(浏览器/服务器)开发。系统标准的三层架构包括:表现层、业务层、持久层,三层架构在实际开发中使用的非常多,下面介绍三层具体是什么。
2. 表现层
表现层也称为web层,它负责接收客户端请求,向客户端响应结果。通常客户端使用 http协议请求web 层, web层需要接收HTTP请求,完成HTTP响应。表现层常用框架都是对servlet的封装,如SpringMVC。
表现层包括展示层和控制层:控制层负责接收请求,展示层负责结果的展示。表现层依赖业务层,接收到客户端请求一般会调用业务层进行业务处理,并将处理结果响应给客户端。表现层的设计一般都使用 MVC 模型( MVC 是表现层的设计模型,和其他层没有关系):
- 1.获取请求数据
- 2.调用service
- 3.根据servic返回结果,响应返回数据
3. 业务层
业务层也称为service 层,它负责业务逻辑处理,和项目开发的需求息息相关。事务一般在service层(业务逻辑层) 处理,所以可以用Spring框架的声明式事务。web层依赖业务层,但是业务层不依赖web层。
业务层在业务处理时可能会依赖持久层,如果要对数据持久化需要保证事务一致性。(也就是我们说的事务应该放到业务层来控制)
4. 持久层
持久层也称为dao 层,负责数据持久化,包括数据层即数据库和数据访问层。数据库是对数据进行持久化的载体,数据访问层是业务层和持久层交互的接口,业务层需要通过数据访问层将数据持久化到数据库中。通俗的讲,持久层就是和数据库交互,对数据库表进行曾删改查的。常用的持久层的解决方案(框架),都是对JDBC技术的封装,如Mybatis。
二、Spring框架简介
1. 定义
Spring是一个开源框架,是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用各种组件,同时为J2EE应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发,从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。
2. 优势
- 方便解耦,简化开发:Spring可以管理所有对象的创建和依赖关系的维护;
-
AOP编程的支持:Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能;
-
声明式事务的支持 :只需要通过配置就可以完成对事务的管理,而无须手动编程;
-
方便程序的测试:Spring对Junit4支持,可以通过注解方便的测试Spring程序;
-方便集成各种优秀的框架:Spring内部提供了对各种优秀框架(如:Struts2、Hibernate、MyBatis等)的直接支持;
- 降低JavaEE API的使用难度:Spring对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等)都提供了封装,使这些API应用难度大大降低。
三、Spring框架体系结构
Spring框架由7个定义良好的模块(组件)组成,各个模块可以独立存在,也可以联合使用
1. Spring Core
核心容器提供了Spring的基本功能。核心容器的核心功能是用Ioc容器来管理类的依赖关系,Spring采用的模式是调用者不理会被调用者的实例的创建,由Spring容器负责被调用者实例的创建和维护,需要时注入给调用者,这是目前最优秀的解耦模式。
2. Spring AOP
Spring的AOP模块提供了面向切面编程的支持。SpringAOP采用的是纯Java实现,Spring AOP采用基于代理的AOP实现方案,AOP代理由Ioc容器负责生成、管理,依赖关系也一并由Ioc容器管理,尽管如此,Spring Ioc容器并不依赖于AOP,这样我们可以自由选择是否使用AOP。
3. Spring ORM
提供了与多个第三方持久层框架的良好整合。
4. Spring DAO
Spring进一步简化DAO开发步骤,能以一致的方式使用数据库访问技术,用统一的方式调用事务管理,避免具体的实现侵入业务逻辑层的代码中。
5. Spring Context
它是一个配置文件,为Spring提供上下文信息,提供了框架式的对象访问方法。Context为Spring提供了一些服务支持,如对国际化(i18n)、电子邮件、校验和调度功能。
6. Spring Web
提供了基础的针对Web开发的集成特性,例如多方文件上传,利用Servlet listeners进行IoC容器初始化和针对Web的applicationContext。
7. Spring MVC
提供了Web应用的MVC实现。Spring的MVC框架并不是仅仅提供一种传统的实现,它提供了一种清晰的分离模型,在领域模型代码和web form之间,并且还可以借助Spring框架的其他特性。
四、Spring IOC 和 AOP
1. 程序中耦合概念
在软件工程中, 耦合指的就是就是对象之间的关联性。对象之间的耦合越高,维护成本越高,因此对象的设计应使类和构件之间的耦合最小。 软件设计中通常用耦合度和内聚度作为衡量模块独立程度的标准,划分模块的一个准则就是高内聚低耦合。高内聚,低耦合:简单来说,就是类内部的关系越紧密越好,类与类之间的关系越少越好。
2. 三层架构解耦
Spring的核心是控制反转(IOC)和面向切面编程(AOP)
在三层架构(dao层、service层、controller层)中如何降低这三层的耦合度?当dao接口的实现出现修改,比如更换了数据库,如何实现不修改service层实现代码?
解决方法:利用控制反转(Inversion Of Control),做到 控制反转就实现了解耦。传统方式:在获取对象时,都是采用new一个对象的方式,是主动的;采用控制反转:在获取对象时跟工厂要,有工厂为我们查找或者创建对象,是被动的,这种被动接受的方式获取对象的思想就是控制反转。
3. Spring IOC && AOP
五、ApplicationContext.xml配置
1. 所需要引入的命名空间
<?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: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.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd">
2. 扫描包下面所有的service层
<!--1. 扫描service包-->
<context:component-scan base-package="com.zz.service" />
3. 加载JDBC配置文件
<!--加载jdbc.properties配置文件-->
<context:property-placeholder location="classpath:jdbc.properties"></context:property-placeholder>
4. 创建数据库连接池
配置类用阿里巴巴的配置核心类 DruidDataSource
<!--2. 创建连接池-->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url" value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>
<property name="initialSize" value="${jdbc.initialSize}"></property>
<property name="maxActive" value="${jdbc.maxActive}"></property>
</bean>
5. 创建SqlSessionFactoryBean
使用MyBatis:
<!--3. 创建SqlSessionFactoryBean,注入连接池-->
<bean class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
</bean>
使用Hibernate:
<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<!-- 与dataSource -->
<property name="dataSource" ref="dataSource"/></property>
</bean>
6. 创建包扫描器
<!--4. 创建包扫描器,指定扫描的dao接口所在包-->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.zz.dao"></property>
</bean>
7. 创建事务管理器
<!--5. Spring提供的事务管理器-->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"></property>
</bean>
8. 开启事务注解支持
<!--6. 开启声明式事务注解支持-->
<tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
Comments | NOTHING