当前位置:网站首页 > R语言数据分析 > 正文

spring揭秘 百度网盘(spring视频百度网盘)



  1. IOC也叫控制反转,它是一种设计思想,将对象的创建和管理交给容量。传统应用程序都是由我们在类内部主动创建依赖对象,这样你需要了解每个类要如何传参,同时会导致类与类之间高耦合。而有了IoC容器后,把创建和查找依赖对象的控制权交给了容器,由容器注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用。更重要的是使得程序的整个体系结构变得非常灵活。
  2. 在Spring中,IOC是通过依赖注入实现的,常见的依赖注入方式有注解注入,setter注入,构造注入。最常用的是注解注入。
  3. 注解注入有@autowried,默认按照类型注入,@resource默认按照名称或类型注入(先名称后类型);@Value 注入int、float、String等基本数据类型,只能标注在成员变量、setter方法上;@Qualifier 按名称自动装配,需要和@Autowired搭配使用,只能标注在成员变量(官方不推荐)、setter方法上。
  4. IOC实现代码解耦,在类A需要类B的时候,IOC容器从容器中将对象注入对应的引用,这样实现了类A和类B的解耦合。
    其实IoC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IoC/DI思想中,应用程序就变成被动的了,被动的等待IoC容器来创建并注入它所需要的资源了。
  5. AOP(Aspect Oriented Programming)即面向切面编程,AOP 是 OOP(面向对象编程)的一种延续AOP 的目的是将横切关注点(如日志记录、事务管理、权限控制、接口限流、接口幂等等)从核心业务逻辑中分离出来,通过动态代理、字节码操作等技术,实现代码的复用和解耦,提高代码的可维护性和可扩展性。OOP 的目的是将业务逻辑按照对象的属性和行为进行封装,通过类、对象、继承、多态等概念,实现代码的模块化和层次化(也能实现代码的复用),提高代码的可读性和可维护性。Spring AOP底层是基于动态代理实现的,如果要代理的对象,实现了某个接口,那么 Spring AOP 会使用 JDK Proxy,去创建代理对象,而对于没有实现接口的对象,就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用 Cglib 生成一个被代理对象的子类来作为代理
  6. 比如日志,测试效率,异常处理,这些经常用到的方法,如果都重新敲一遍就会出现大量重复代码。
  7. AOP中有许多概念:
    通知(Advice): AOP 框架中的增强处理。通知描述了切面何时执行以及如何执行增强处理。
    连接点(join point): 连接点表示应用执行过程中能够插入切面的一个点,这个点可以是方法的调用、异常的抛出。在 Spring AOP 中,连接点总是方法的调用。
    切点(PointCut): 可以插入增强处理的连接点。
    切面(Aspect): 切面是通知和切点的结合。
    引入(Introduction):引入允许我们向现有的类添加新的方法或者属性。
    织入(Weaving): 将增强处理添加到目标对象中,并创建一个被增强的对象,这个过程就是织入。
    作用:从定义中来看,就是为了在程序运行期间,不修改源码对已有方法进行增强。
    优势:减少重复代码 提交了开发效率 维护方便
    实现方式: 就是动态代理的技术
    具体的作用:实现事务的控制 日志 和 安全模块









前置通知(@Before)
后置通知(@After)
返回通知 (@AfterReturning)
异常通知 (@AfterThrowing)
环绕通知 (@Around)



  • 当我们不能或者不想直接访问某个类时,就需要用到代理模式。
  • 动态代理基于反射机制,反射机制可以让程序在运行过程中去获取任意类的所有方法和属性。
  • 代理类可以为被代理类去做一些事情,可以在不知道源码的情况下对一个方法进行增强。

JDK动态代理实现:
首先被代理的类要使用接口实现类的方式。
接着创建代理类实现invocationhandler接口,接着重写invoke方法,在方法里面用参数method调用invoke方法(这个就是原来的方法,可以在前后进行增强),传入被代理对象,以及方法
调用Proxy.newProxyInstance()方法,需要传入类加载器,增强类所实现的接口,前面代理类创建的对象。然后返回一个被代理接口对象。因为返回的对象实现了被代理接口,因此可以强转成被代理接口。
然后可以用该对象调用方法,调用的就是增强之后的方法。
总的思想就是把对象、方法、参数都传进入;然后在代理类里面调用方法,这样就可以在调用前后做增强。




cglib动态代理实现:
创建被代理类。
创建代理类,实现MethodInterceptor接口。创建被代理类属性,并创建构造函数。实现intercept方法,在该方法里面也是调用method.invoke方法,传入被代理属性,传入方法。在该方法之前和之后都可以做增强。
使用动态代理只需要创建代理类,传给被代理对象,返回代理类对象。
调用Enhancer.create(),传入被代理类的类型,以及代理类对象,然后返回一个被代理类对象。(需要强制类型转换)
然后就可以用被代理类对象调用方法。




Spring MVC是一种基于MVC(Model-View-Controller)模式的Web框架,用于Web应用程序的开发。Spring MVC框架的核心思想是将请求(request)的处理分为三个部分:模型(Model)、视图(View)和控制器(Controller)。模型是指MySQL数据库中的数据表和数据表中的数据。视图是指Web应用程序中的用户界面,用于展示数据。控制器是指Web应用程序中的代码,用于处理用户请求并将数据从模型传递到视图。

Spring MVC的处理流程如下:
客户端发起请求,服务器的前端控制器接收到请求,并根据请求信息调用处理器映射器。
处理器映射器根据请求的URL找到对应的处理器,并调用处理器适配器来适配处理器。
处理器适配器会根据适配的处理器找到真正的处理器来处理业务逻辑。
处理器执行完毕之后,会返回一个ModelAndView对象。
视图解析器会根据ModelAndView的逻辑视图去解析出真正的视图对象。
前端控制器再把数据传给视图对象,并将整个视图对象返回给用户。





spring事务传播机制取决于方法所设置的传播级别,包括:
REQUIRED(默认):当前存在事务则加入当前事务,不存在则创建一个事务。因为是共用事务,所以父方法catch子方法的异常还是会全部回滚。
SUPPORTS:当前存在事务则加入当前事务,不存在则以非事务方式运行。
MANDATORY:当前存在事务则加入当前事务,不存在则抛出异常。
REQUIRES_NEW:创建一个新事务,当前存在事务则挂起当前事务。
NOT_SUPPORTED:始终以非事务方法运行,当前存在事务则挂起当前事务。
NEVER:以非事务方法运行,当前存在事务则抛出异常。
NESTED:当前存在事务则创建子事务,父事务回滚会导致子事务回滚。而子事务回滚,如果父事务catch了异常则父事务不会回滚。当前不存在事务则创建新事务。






(启动类上面的springbootapplication注解包含了@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个注解,@EnableAutoConfiguration代表开启自动装配,@ComponentScan用来配置组件扫描的路径,默认是启动类所在目录及其子包)

2.接着Spring容器会使用反射机制创建这些组件的实例,像@Component,@Controller等的属于是Spring组件注解,Spring会将对应的类检测为一个Bean。而@Configuration属于Spring配置类注解,Spring会检查对应类里面加了@Bean注解的方法,一个方法对应一个bean.

3.再接着Spring会解析组件类中的依赖关系,通过依赖注入来将所需的对象注入到类的属性中,以完成装配.

(比如autowired,resource等注解或者构造函数或者setter注入)

SpringBoot 在启动时会扫描外部引用 jar包中的META-INF/spring.factories文件,将文件中配置的类型信息加载到 Spring 容器(此处涉及到 JVM类加载机制与 Spring 的容器知识),并执行类中定义的各种操作。对于外部 jar 来说,只需要按照 SpringBoot定义的标准,就能将自己的功能装置进 SpringBoot。

方法的访问级别不是public
类内内部调用事务方法
添加事务注解的类没有被spring管理

  1. 单例模式。spring容器中的对象,默认作用域都是单例的。底层通过ConcurrentHashMap 实现单例注册表的特殊方式实现单例模式。获取单例对象的时候会使用syn同步块,使用ConcurrentHashMap 对象作为锁对象,往map里面插入对象的操作也使用了syn锁,从而确保对象单例。(单例bean存在线程安全问题,只要多线程操作同一个对象。因而尽量避免定义可变的成员变量,如果实在需要可以用ThreadLocal)
  2. 工厂模式。spring的BeanFactory、ApplicationContext在创建bean对象的时候使用的是工厂模式。其中ApplicationContext在容器启动的时候会一次性创建所有的bean,而BeanFactory在需要用到bean的时候才会注入。
  3. 代理模式。Spring中最经典的就是面向切面编程AOP,能够在不修改原方法的情况下对方法进行增强,特别是将与业务无关的重复的操作封装起来,可以减少重复代码,降低代码的耦合度。如果要代理的对象实现了某个接口,Spring会使用JDK动态代理,如果没有实现接口,则会使用CGlib代理。
  4. 观察者模式。Spring中有一个事件驱动模型,和发布订阅模式很像。有事件发布者,事件监听者。事件类需要继承抽象类ApplicationEvent,事件发布者通过ApplicationContext类的publishEvent方法发布事件。事件监听者需要实现ApplicationListener<事件类>接口,重写onApplicationEvent方法。
  5. 适配器模式.
到此这篇spring揭秘 百度网盘(spring视频百度网盘)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • druid怎么读英语(fluid怎么读英语)2025-07-09 14:27:05
  • ewm焊机报警代码(焊机wcr报警)2025-07-09 14:27:05
  • framebrowser.exe停止工作(fr.exe已停止工作)2025-07-09 14:27:05
  • k8s 发行版(k8s apiversion)2025-07-09 14:27:05
  • prim算法是什么算法(prim算法csdn)2025-07-09 14:27:05
  • ip15promax价格走势图(苹果15promax参数)2025-07-09 14:27:05
  • redhat证书查询(redhat证书好就业吗?)2025-07-09 14:27:05
  • prim算法(prim算法思想)2025-07-09 14:27:05
  • airplay安卓(airplay安卓手机)2025-07-09 14:27:05
  • netuser命令的作用(netsh命令的作用)2025-07-09 14:27:05
  • 全屏图片