Spring核心概念
spring可以降低代码书写的耦合度
(因为实现业务层逻辑时,我们需手动创建service的对象,如果service发生改变,需重新创建新的对象,下面的代码也需重新调试,很麻烦)
解决方案:
使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象
- IoC (Inversion of Control)控制反转
对象的创建控制权由程序转移到外部,这种思想称为控制反转
对IoC思想的实现
- Spring提供了一个容器,IoC容器,用来充当IoC思想中的外部,即这个对象由自己创建,变为Spring IoC容器提供
- IoC容器负责对象的创建,初始化等一系列工作,被创建或管理的对象在容器中称为Bean
- DI思想 依赖注入:
- 在容器中建立bean与bean之间的依赖关系的整个过程,称依赖注入
IoC入门
- 导入相应jar包
- 定义Spring管理的类(接口)
- 创建配置文件,并配置bean
- 初始化IoC容器(Spring核心容器/Spring容器),通过容器获取bean
DI入门
思路分析:
- 基于IoC管理bean
- Service中使用new形式创建的Dao对象不保留
- Service中需要的Dao对象如何进入到Service中(提供方法set)
- Service中与Dao的关系如何描述(配置)
异常处理
由于异常处理的代码都具有相同的部分,所以使用AOP来统一处理项目中的异常
可在表现层定义异常处理器
//声明这个类是用来做异常处理的(使用AOP思想)
//这个类一定要被SpringMvc的配置类扫到
@RestControllerAdvice
public class ProjectExceptionAdvice {
@ExceptionHandler(Exception.class) //定义处理哪种类型的异常
//定义处理异常的方法
public Result doException(Exception e){
System.out.println("处理异常。。。");
return new Result(666,null,"有异常");
}
}
项目异常处理方案
- 业务异常
- 系统异常
- 其他异常
- 自定义业务异常和系统异常
- 在可能出现异常的地方将异常进行包装,转换成自定义异常
- 在异常处理器中,定义处理每种异常的方法
SpringMVC过滤访问的静态资源
-
创建一个配置类(SpringMvcSupport),且必须让SpringMvcConfig将其加载进去,即扫到这个类
-
让其继承于WebMvcConfigurationSupport类,且重写其中的addResourceHandlers方法
@Configuration public class SpringMvcSupport extends WebMvcConfigurationSupport { @Override protected void addResourceHandlers(ResourceHandlerRegistry registry){ //意为当访问/pages/...时,走/pages下的资源 registry.addResourceHandler("/pages/**").addResourceLocations("/pages/"); } }