spring的原理

一、pring的原理

1.1 IOC控制反转 ==> 扫描机制通过代理方式动态创建对象

扫描注解,通过反射获取类路径,动态创建对应类的对象,放置在对象池中(多线程做法,防止短时间内创建对象过多,耗尽内存)

注解作用相同;但为了区分三层架构,controller层的注解为@RestController和@Controller;service层的注解为@Service;dao层的注解为@Repository;其它的@Componet


1.2 aop面向切面思想 ==> 用于是否校验用户登录凭证、角色校验、权限校验(通过拦截器)

作用:对某一类对象进行监督和控制

注解接口类@interface

通过全局拦截器可以在执行该方法之前,进行拦截;通过获取方法上的注解(自定义注解,需要注解接口类)判断是否需要进行校验

面向切面思想:创建一个注解标记接口,通过反射获取方法/类上的注解来判断是否拦截,决定是否做校验


二、全局异常处理器

系统出现404、500等错误,这些异常会默认通过全局异常处理器@ControllerAdvice来处理异常(也可以进行自定义异常处理)

package cn.kooun.core.exception;

import javax.servlet.http.HttpServletRequest;

import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

import cn.kooun.common.result.ResultUtils;

/**
 *	全局异常处理
 * @author HuangJingNa
 * @date 2019年12月21日 下午3:46:19
 *
 */
@ControllerAdvice//标记此类为全局异常拦截器
public class GlobalExceptionHandler {
	/**
	 * 	系统异常处理,如404、500
	 * @author HuangJingNa
	 * @date 2019年12月21日 下午3:48:45
	 *
	 * @return
	 * @throws Exception
	 */
	@ExceptionHandler(value = Exception.class)//监听对应的异常对象
	@ResponseBody
	public Object defaultErrorHandler(HttpServletRequest req, Exception e) throws Exception{
		//控制台输出错误信息
		e.printStackTrace();
//		if(e instanceof ArithmeticException) {
//			return ResultUtils.error("除数不能为0");
//		}
		return ResultUtils.error("系统繁忙~");
	}
	/**
	 * 	其它异常/自定义异常
	 * @author HuangJingNa
	 * @date 2019年12月21日 下午3:54:32
	 *
	 * @param req
	 * @param e
	 * @return
	 * @throws Exception
	 */
	@ExceptionHandler(value = ArithmeticException.class)//监听对应的异常对象
	@ResponseBody
	public Object defaultArithmeticHandler(HttpServletRequest req, Exception e) throws Exception{
		//控制台输出错误信息
		e.printStackTrace();
		return ResultUtils.error("除数不能为0");
	}
}
原文地址:https://www.cnblogs.com/nadou/p/14003758.html