zoukankan      html  css  js  c++  java
  • 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");
    	}
    }
    
  • 相关阅读:
    JS常用自定义方法
    mybatis like用法
    设计模式之前之UML
    DSU模板(树的启发式合并)
    【hihocoder编程练习赛9】闰秒
    静态链接与动态链接的区别【转】
    pragma指令详解(转载)
    Crawl(2)
    Crawl(1)
    Treap
  • 原文地址:https://www.cnblogs.com/nadou/p/14003758.html
Copyright © 2011-2022 走看看