• spring总结


    什么是AOP?

    面向切面编程。
    他里面包含几个概念,分别是JoinPoint、PointCut和Advice。
    JoinPoint:可以被切入的方法。
    PointCut:切入的那些方法。
    Advice:通知。分为前置通知、后置通知、异常通知、最终通知和后置通知。
    spring中aop的应用:拦截器就是aop的例子。
    用法示例:

    package learnFromBilibili.util;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.*;
    import org.springframework.stereotype.Component;
    
    @Component
    @Aspect
    public class LoggerAnnotation {
    
        /**
         * 用户打印日志,计划让其在切入点方法执行之前执行(切入点方法就是业务层方法)
         */
        public void printLog(){
            System.out.println("Logger类中的printLog方法开始记录日志了...");
        }
    
        /**切入点*/
        @Pointcut("execution(* learnFromBilibili.service.impl.*.*(..))")
        private void pt1(){}
    
        /**
         * 前置通知
         */
        @Before("pt1()")
        public void beforePrintLog(){
            System.out.println("前置通知");
        }
    
        /**
         * 后置通知
         */
        @AfterReturning("pt1()")
        public void afterReturningPrintLog(){
            System.out.println("后置通知");
        }
    
        /**
         * 异常通知
         */
        @AfterThrowing("pt1()")
        public void afterThrowingPrintLog(){
            System.out.println("异常通知");
        }
    
        /**
         * 最终通知
         */
        @After("pt1()")
        public void afterPrintLog(){
            System.out.println("最终通知");
        }
    
        /**环绕通知*/
        @Around("pt1()")
        public Object aroundPrintLog(ProceedingJoinPoint pjp){
            Object rtValue = null;
            try {
                Object[] args = pjp.getArgs();
                System.out.println("环绕通知。。。前置");
                rtValue = pjp.proceed(args);
                System.out.println("环绕通知。。。后置");
                return rtValue;
            } catch (Throwable throwable) {
                System.out.println("环绕通知。。。异常");
                throw new RuntimeException(throwable);
            } finally {
                System.out.println("环绕通知。。。最终");
            }
        }
    
    }
    

    什么是IoC?

    Inversion of Control 控制反转
    将对象的创建交给容器,利用工厂模式,使用反射创建新对象。
    spring中注入的两种方式:注解和构造函数。
    spring中的两种IoC容器:BeanFactory和ApplicationContext。
    BeanFactory常用:XmlBeanFactory(已过时 Deprecated,我就用)。
    ApplicationContext常用:ClassPathXmlApplicationContext、FileSystemXmlApplicationContext、XmlWebApplicationContext和ConfigServletWebServerApplicationContext(spring boot中使用)。
    IoC的好处:
    它将最小化应用程序中的代码量。
    它以最小的影响和最少的侵入机制促进松耦合。
    它支持即时的实例化和延迟加载 Bean 对象。
    它将使您的应用程序易于测试,因为它不需要单元测试用例中的任何单例或 JNDI 查找机制。

    事务?

    事务:是指开启、提交、回滚和释放这一系列操作,目的是控制对数据库的操作。
    事务类型:Spring中包含声明式和编程式,也就是用注解还是自己写。

    我只用过注解的...感觉自己写不仅麻烦还容易出错...

    事务的传播级别:指的是当前带有事务配置的方法,需要怎么处理事务。

    不知道为啥面试都喜欢考这玩意儿...一般也不改它...

    在Spring中一共有7种。
    支持当前事务的情况 3种
    1 如果当前存在事务,则使用该事务。如果当前没有事务,则创建一个新的事务。PROPAGATION_REQUIRED
    2 如果当前存在事务,则使用该事务。如果当前没有事务,则以非事务的方式继续运行。PROPAGATION_SUPPORTS
    3 如果当前存在事务,则使用该事务。如果当前没有事务,则抛出异常。PROPAGATION_MANDATORY
    不支持当前事务的情况 3种
    1 如果当前没有事务,创建一个新的事务。如果当前存在事务,则把当前事务挂起。PROPAGATION_REQUIRES_NEW
    2 如果当前没有事务,以非事务方式运行。如果当前存在事务,则把当前事务挂起。PROPAGATION_NOT_SUPPORTED
    3 如果当前没有事务,以非事务方式运行。如果当前存在事务,则抛出异常。PROPAGATION_NEVER
    其他情况 1种
    1 如果当前存在事务,则创建一个事务作为当前事务的嵌套事务来运行。如果当前没有事务,则等价于PROPAGATION_REQUIRED。

    这样分类后好记多了...但我还是不想记...

    事务的回滚规则:默认情况下,事务只有遇到运行期异常时才会回滚,而在遇到检查型异常时不会回滚。但是可以声明事务在遇到特定的检查型异常时像遇到运行期异常那样回滚。同样,你还可以声明事务遇到特定的异常不回滚,即使这些异常是运行期异常。

  • 相关阅读:
    获取文件扩展名的几个函数
    Window下,在TEMP路径下生成一个临时文件名
    字符串中的TOUPPER函数
    字符串中的TRIM操作
    BIN转换成HEX格式及HEX转换成BIN的两个函数接口
    GMSSL在Window下的编译
    VS2012下自定义打开文件对话框
    Daliy Algorithm (graph,思维)-- day 59
    Daliy Algorithm (贪心,gcd)-- day 58
    图论--Floyd(弗洛伊德)算法
  • 原文地址:https://www.cnblogs.com/fxw-learning/p/13830729.html
Copyright © 2020-2023  润新知