SpringIOC模块
SpringMVC模块
SpringAOP模块
IOC是一种设计思想,称之为控制反转。基于这种思想实现对象创建,对象的科学管理以及应用时的解耦(借助DI机制实现)。Spring框架核心就是基于这种机制进行了完美实现。
思考:控制反转探讨的是什么?答:谁控制谁的问题,Spring控制对象的创建管理。
思考:生活中的IOC的实现?答:例如股票操盘手,父母包办婚姻。
Spring三大设计思想:IOC/MVC/AOP
思考:如何理解Spring中的Bean对象?答:由Spring管理的对象都是Bean对象。
思考:如何理解Spring中的Bean容器?答:存储Bean对象的容器,可以是Map对象。
思考:我们自己写的类如何交给Spring管理?
答1:通过xml配置文件进行描述,例如
答2:通过annotation方式进行描述,例如@Controller/@Service
思考:Spring中Bean对象的类型?
答1:未实现FactoryBean接口的对象
答2:实现了FactoryBean接口的对象
思考:Spring中如何创建Bean对象?答:借助BeanFactory工厂,基于反射技术创建Bean对象。
思考:Spring管理的Bean对象常用作用域?
答1:Singleton(单例作用域),Bean对象具备全局唯一性。
答2:Prototype(多例作用域),每次获取Bean对象都会创建一个新的实例。
思考:Spring管理的Bean对象是否支持延迟加载?答:支持。
思考:如何自己设计一个IOC容器呢?答:详情请查阅代码。
IOC_Bean容器(配置文件/工厂/容器/全局访问点)
思考:如何理解Spring中的两大Map对象?
答1:一个Map用于存储Bean的配置信息。
答2:一个Map用于存储Bean的实例信息。
未实现FactoryBean接口:直接通过反射技术调用构造器创建Bean对象。
实现了FactoryBean接口:调用FactoryBean对象的getObject方法,创建Bean对象。
说明:一般在创建一些相对复杂的工厂对象时,通常会写一个工厂Bean对象,然后基于工厂Bean对象创建具体的工厂对象,例如:SqlSessionFactoryBean/ShiroFilterFactoryBean/ProxyFactoryBean等。
xml配置文件方式:
annotation方式:@Service/@Controller/@Configuration/@Bean...
MVC是一种分层架构设计思想,目的是基于对象职责上的不同,进行分层设计,实现各司其职,各尽所能,以提高代码的可维护性/可扩展性。
SpringMVC中的MVC模块是基于MVC分层软件设计思想的一种完美实现,类似的框架还有Struts2等。
注意:B/S网络系统架构下的单体式JavaEE软件一般采用MVC水平切分
所有MVC框架的重点都在请求和响应数据的处理上
MVC请求处理
请求路径:普通方式/rest风格方式,报错404
请求方式:Get请求/Post请求,报错405
请求参数:直接量/PO对象/MAP对象,报错400
MVC响应处理
响应方式:转发/重定向(redirect)
响应数据封装:ModelAndView,Model,Map
响应数据转换:将对象序列化为JSON格式字符串
注意:如果将响应数据转换为JSON格式字符串,将不调用ViewResover视图解析器对象
拦截器是项目中的一种通用组件,通常可以在某个对象执行之前或之后做一些预处理操作,可以将其看成是一种特殊的过滤器。
说明:在项目中自己编写SpringMVC拦截器
编写类实现HandlerInterceptor接口或者继承HandlerInterceptorAdapter类;
配置拦截器
项目中异常的处理方式及规则
异常捕获:try{}catch{},日志输出
继续抛出:数据层抛给业务层,业务层再继续抛给控制层,但是异常传递要占用资源,对性能会有一定影响,所以异常能处理则处理,处理不了则继续抛出。
SpringMVC中对异常处理的手段有两种:
直接在控制层方法中处理异常:处理异常的方法使用@ExceptionHandler修饰,并指定具体可以处理的异常类型。
定义全局异常处理类,在此类中对异常信息进行封装和转换。
说明:当Controller类中定义了局部异常处理方法,在全局异常处理类中也定义了同样的异常处理方法,那就遵循局部优先规则。
AOP是一种面向切面的程序设计思想,基于这种思想可以动态为对象添加扩展功能设置控制对象的执行,Spring框架中对这种思想做了一个完美的实现。
Spring框架中可以基于AOP实现对目标对象的控制以及功能的扩展:
目标对象实现了接口则采用JDK动态代理控制目标对象
目标对象未实现接口则采用Cglib代理控制目标对象
项目中的日志管理:基于JDK动态代理实现目标对象控制及功能扩展
切面(Aspect):封装了扩展功能的对象。
通知(Advice):封装了扩展功能及目标方法调用的一个切面方法。
包括:@Around,@Before,@After,@AfterReturning,@AfterThrowing
连接点:JointPoint,ProceedingJoinPoint(泛指一个目标方法)。
切入点:Pointcut(泛指多个目标方法的集合)。
说明:了解常用的切入点表达式
bean(*ServiceImpl)
@annotation(com.db.common.annotation.RequiredLog)
...