• 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");
    	}
    }
    
  • 相关阅读:
    【Linux开发】Linux磁盘管理
    【Qt开发】QThread中的互斥、读写锁、信号量、条件变量
    【Qt开发】QThread中的互斥、读写锁、信号量、条件变量
    【Qt开发】设置中心窗口 setCentralWidget
    【Qt开发】设置中心窗口 setCentralWidget
    【Qt开发】QT样式表单 qss的样式优化
    【Qt开发】QT样式表单 qss的样式优化
    【Qt开发】foreach用法
    【Qt开发】foreach用法
    【Qt开发】设置Qt应用程序图标
  • 原文地址:https://www.cnblogs.com/nadou/p/14003758.html
Copyright © 2020-2023  润新知