当前位置:   article > 正文

Spring框架的一些问题_spring框架会阻止编译器吗

spring框架会阻止编译器吗

AOP是什么

面向方面编程,是oop面向对象编程的补充和完善。oop允许你定义从上到下的关系,但是不适合从左到右的关系。无法在横向上进行操作,导致代码大量的重复而且无法重用。
而AOP就是在中间切一刀,将那些影响多个类的封装到一个可重用模块就是Aspect,即为方面。就是那些可能与业务无关但是业务逻辑需要调用的逻辑封装起来避免代码重复。
AOP把系统分为两部分:核心关注点,横切关注点。业务处理的是核心关注点,处理写逻辑的就是横切关注点不影响业务逻辑的,比如权限认证、日志、事务处理。
实现AOP的技术,主要分为两大类:一是采用动态代理技术,利用截取消息的方式,对该消息进行装饰,以渠道原有对象行为的执行,二是采用静态植入,引入特定的语法创建方面。

AOP使用场景

权限,缓存,懒加载,调试,资源池,事务

AOP相关概念

方面Aspect:一个关注点的模块化,用spring的Advisor或者拦截器实现
连接点Joinpoint:程序执行过程中明确的点,如方法抛出
通知Advice:在特定的连接点,AOP框架执行的动作
切入点Pointcut:指定一个通知将被引发的一系列连接点的集合。AOP框架必须允许开发者指定切入点。例如,使用正则表达式。 Spring定义了Pointcut接口,用来组合MethodMatcher和ClassFilter,可以通过名字很清楚的理解, MethodMatcher是用来检查目标类的方法是否可以被应用此通知,而ClassFilter是用来检查Pointcut是否应该应用到目标类上
引入(Introduction): 添加方法或字段到被通知的类。 Spring允许引入新的接口到任何被通知的对象。例如,你可以使用一个引入使任何对象实现 IsModified接口,来简化缓存。Spring中要使用Introduction, 可有通过DelegatingIntroductionInterceptor来实现通知,通过DefaultIntroductionAdvisor来配置Advice和代理类要实现的接口
目标对象Target Object: 包含连接点的对象。也被称作被通知或被代理对象。POJO
AOP代理AOP Proxy: AOP框架创建的对象,包含通知。 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。
织入Weaving: 组装方面来创建一个被通知对象。这可以在编译时完成(例如使用AspectJ编译器),也可以在运行时完成。Spring和其他纯Java AOP框架一样,在运行时完成织入。

Springmvc执行流程

第一步:发起请求到前端控制器(DispatcherServlet)

第二步:前端控制器请求HandlerMapping查找 Handler

     可以根据xml配置、注解进行查找
  • 1

第三步:处理器映射器HandlerMapping向前端控制器返回Handler

第四步:前端控制器调用处理器适配器去执行Handler

第五步:处理器适配器去执行Handler

第六步:Handler执行完成给适配器返回ModelAndView

第七步:处理器适配器向前端控制器返回ModelAndView

     ModelAndView是springmvc框架的一个底层对象,包括Model和view
  • 1

第八步:前端控制器请求视图解析器去进行视图解析

     根据逻辑视图名解析成真正的视图(jsp)
  • 1

第九步:视图解析器向前端控制器返回View

第十步:前端控制器进行视图渲染

     视图渲染将模型数据(在ModelAndView对象中)填充到request域
  • 1

第十一步:前端控制器向用户响应结果

动态代理

就是你要实现某个接口对吧,然后你要加点日志啊啥的对吧,你就可以给这个类创建一个代理,这个类吧是动态生成的包含了原来累的方法还更加有拓展性。

为什么选择java8

java8能更快的处理和维护解决新的编程问题
例如:
以前做些判断的时候往往是循环然后用equals这种去判断是否满足条件,但在java8中可以你可以写判断的方法然后在调用方法的时候可以直接在参数里面加
还可以用lambda表达式进行几乎所有的for循环

java8的Streams
streams可以更好的对集合进行处理,在多个if判断的条件下可以用stream进行较好的处理在之前的代码中,我们会用到for-each来对集合进行迭代,这种方法也叫外部迭代;而在有了streams api之后,根本用不着操心循环的事情,数据处理完全是在库内部进行的,这种方法也叫内部迭代

Streams的常用的创建方法

Stream<String> stream = list.stream();//获取一个顺序流
Stream<String> parallelStream = list.parallelStream();//获取一个并行流

//使用Arrays中的Stream方法,将数组转成流
Integer[] nums = new Integer[10];
Stream<Integer> stream = Arrays.stream(nums);

//使用Arrays中的of()、iterate()、generate()
Stream<Integer> stream = Stream.of(1,2,3,4,5,6);
Stream<Integer> streams2 = Stream.iterate(0,(x) -> x + 2).limit(6);
Stream<Double> stream3 = Stream.generate(Math::random).limit(2);

//将每行内容转成流
BufferedReader reader = new BufferedReader(new FileReader("F:\\test_stream.txt"));
Stream<String> lineStream = reader.lines();
lineStream.forEach(System.out::println);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/1010526
推荐阅读
相关标签
  

闽ICP备14008679号