一、前言
1、什么样的架构,我们认为是一个优秀的架构?
判断准则:可维护性好,可扩展性好,性能。最直接的体现就是高内聚,低耦合。
- 高内聚:就是尽量将代码写在与之功能描述一致的模块中。如User表的操作写在UserDAO里面,不要写在非UserDAO的类里面。
- 低耦合:就是尽量减少类与类之间的直接关系。
- 直接关系:Controller层依赖Service层,在Controller层直接new Service层的类的对象;Service层依赖Dao层,在Service层直接new Dao层的对象。
2、Spring的控制反转/依赖注入(IOC/DI)
Spring框架就是通过IoC/DI(控制反转/依赖注入)实现程序的解耦。从而提高程序的维护性和扩展性。
二、Spring概述
1、Spring框架
Spring框架提供涵盖了JavaEE开发的表示层,服务层,持久层的所有组件功能。
- Spring是一个一站式的企业级(JavaEE)开发框架,意味着,仅仅使用一个Spring框架就可以满足JavaEE开发的表示层,服务层,持久层的开发。
- Spring强调的理念是:轻量级。意味着Spring提供的功能模块,除了内核模块以外,其他功能模块开发人员可以选择性使用。
- Spring框架在现实开发中,主要的功能是整合第三方框架。
三、Spring IOC和AOP(重点)
- Spring 的主要作用就是为代码“解耦”,降低代码间的耦合度。就是让对象和对象(模块和模块)之间关系不是使用代码关联,而是通过配置来说明。减轻对项目模块之间的管理, 类和类之间的管理, 帮助开发人员创建对象,管理对象之间的关系。
- Spring 根据代码的功能特点,使用 Ioc 降低业务对象之间耦合度。IoC 使得主业务在相互调用过程中,不用再自己维护关系了,即不用再自己创建要使用的对象了。而是由 Spring容器统一管理,自动“注入”,注入即赋值。
- 而 AOP 使得系统级服务得到了最大复用,且不用再由程序员手工将系统级服务“混杂”到主业务逻辑中了,而是由 Spring 容器统一完成“织入”。
1、Spring核心功能 IOC控制反转
(1)什么是IOC
- 控制: 创建对象,对象的属性赋值,对象之间的关系管理。
- 反转: 把原来的开发人员管理,创建对象的权限转移给代码之外的容器实现。 由容器代替开发人员管理对象。创建对象,给属性赋值。
(2)为什么要使用IOC
目的就是减少对代码的改动, 也能实现不同的功能。 实现解耦合。
(3)IOC的技术实现——DI依赖注入
Spring 容器是一个超级大工厂,负责创建、管理所有的 Java 对象,这些 Java 对象被称为 Bean。Spring 容器管理着容器中 Bean 之间的依赖关系,Spring 使用“依赖注入”的方式来管理 Bean 之间的依赖关系。使用 IoC 实现对象之间的解耦和。Spring是使用的DI实现了IOC的功能, Spring底层创建对象,使用的是反射机制。
(4)DI依赖注入
DI:依赖注入,表示创建对象,给属性赋值。
1)DI的实现有两种:
- 在Spring的配置文件中, 使用标签和属性完成,叫做基于XML的DI实现
- 使用Spring中的注解,完成属性赋值, 叫做基于注解的id实现
2)DI的语法分类:
- set注入(设置注入): Spring调用类的set方法,在set方法可以实现属性的赋值
- 构造注入,Spring调用类的有参数构造方法,创建对象。在构造方法中完成赋值
3)下面重点讲讲基于注解的实现方式(DI)
- 定义 Bean 的注解@Component
- 简单 类型属性注入@Value
使用该注解完成属性注入时,类中无需 setter。当然,若属性有 setter,则也可将其加到 setter 上。
- byType 自动注入@Autowired
使用该注解完成属性注入时,类中无需 setter。当然,若属性有 setter,则也可将其加到 setter 上。
- byName 自动注入@Autowired 与@Qualifier
- JDK 注解@Resource 自动注入
2、Spring核心功能AOP面向切面编程
(1)AOP概述
AOP 为 Aspect Oriented Programming 的缩写,意为:面向切面编程,可通过运行期动态代理实现程序功能的统一维护的一种技术。AOP 是 Spring 框架中的一个重要内容。利用 AOP
可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
(2)AOP的实现
aop是一个规范,是动态的一个规范化,一个标准aop的技术实现框架:
1)spring:
- spring在内部实现了aop规范,能做aop的工作。
- spring主要在事务处理时使用aop。
- 我们项目开发中很少使用spring的aop实现。 因为spring的aop比较笨重。
2)aspectJ: 一个开源的专门做aop的框架。spring框架中集成了aspectj框架,通过spring就能使用aspectj的功能。aspectJ框架实现aop有两种方式:
- 使用xml的配置文件 : 配置全局事务
- 使用注解,我们在项目中要做aop功能,一般都使用注解, aspectj有5个注解:前置通知、后置通知、环绕通知、异常通知、异常通知。
(3)AOP的好处
- 减少重复
- 专注业务