首页 > 其他分享 >spring的IOC和AOP机制

spring的IOC和AOP机制

时间:2023-05-23 21:13:46浏览次数:33  
标签:ioc 对象 创建 代码 aop spring AOP IOC

ioc(控制反转  inversion of control)aop (Aspect-Oriented Programming) 是spring的灵魂

我的理解:
控制反转
就是说对原来对象的创建,也就是new一个对象,都是我们手动完成的,但是引入了ioc的思想之后,
我们将对象的创建交给spring容器而不需要我们手动进行创建,我们要用的时候只需要将某个需要使用的对象
注入(@Autoware, @Resource,或者其他方法),然后直接调用即可,依赖的创建有两种方式,一种是直接在
启动容器时立马创建,一种是延迟创建,也就是懒加载的方式,依赖注入(DI)和控制反转是同一个概念。

 

面向切面编程
就是说在我们不需要修改原有代码的前提下,对原有的代码进行功能的增强,例如利用aop进行方法
添加日志,可以在执行前后进行日志输出,aop也算是一种解耦思想的体现,让代码耦合率降低,提高代码的可用性,
让代码也更容易扩展和维护。下面是我对aop的理解,用一张图展示核心思想,大概就是oop是一种垂直的关系,而不
能实现功能切入水平:

 



用到的设计模式

ioc使用了工厂模式加反射实现,通过sessionFactory去注入实例,通过反射动态的创建对象
aop使用了代理模式,代理模式是常用的java设计模式。
aop的实现主要分为两大类:一类是动态代理,利用截取消息的方式,对该消息进行装饰,以取代原有对象行为的执行;
二是采用静态代理,引入特定的语法创建页面,从而使得编译器可以在编译期间织入有关代码。

 

标签:ioc,对象,创建,代码,aop,spring,AOP,IOC
From: https://www.cnblogs.com/huoziqi/p/17426338.html

相关文章

  • spring中@Autowired和@Resource的区别
    @Resource和@Autowired都是做bean的注入时使用,其实@Resource并不是Spring的注解,它的包是javax.annotation.Resource,需要导入,但是Spring支持该注解的注入。1、共同点两者都可以写在字段和setter方法上。两者如果都写在字段上,那么就不需要再写setter方法。2、不同点(1)@Autowire......
  • Spring源码:Bean生命周期(终章)
    前言本系列前面讲解了Spring的bean定义、bean实例化、bean初始化等生命周期。这些步骤使我们能够了解bean从创建到准备好使用所经历的过程。但是,除了这些步骤,bean的销毁也是非常重要的一步。在本系列的最后,我们将深入探讨bean的销毁过程,包括在什么情况下会发生销毁、销毁的顺序以......
  • org.springframework.data.annotation.Transient 和 javax.persistence.Transient 的
    1、org.springframework.data.annotation.Transient 和 javax.persistence.Transient 都是用于标记一个属性不需要被持久化到数据库中的注解。它们的区别在于它们所处的框架和使用场景。org.springframework.data.annotation.Transient 是SpringDataJPA框架提供的注解,用......
  • SpringMVC响应json数据
    SpringMvc响应json数据@Controller@RequestMapping("/json")publicclassJsonController{@RequestMapping("/js1")@ResponseBody//响应json:将return的值作为文本响应给客户端,而不是转发到对应页面publicStringjs1(){System.out.println("js......
  • 学习笔记-Spring事务
    学习的文章小姐姐非要问我:spring编程式事务是啥?(qq.com)一文搞懂什么是事务-知乎(zhihu.com)阿里3面:Spring声明式事务连环炮,让我措手不及。。(qq.com)带你读懂Spring事务——事务的传播机制-知乎(zhihu.com)spring事务失效的12种场景_事务什么时候失效_hanjq_cod......
  • SpringBoot声明连接多个redis数据源配置模版
    在实际开发中,我们可能会用到2个不同的redis数据源;如何连接查询详情:文章目录一、依赖二、配置文件三、config类配置四、序列化问题五、封装工具类一、依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-dat......
  • (二)Spring源码解析:默认标签解析
    一、概述还记得我们在上一讲末尾提到的关于默认标签解析和自定义标签解析吧。本讲就来针对默认标签解析进行讲解。为了便于衔接上一讲的内容,我们将源码部分粘贴出来:从上图中的源码中,我们可以看出默认标签的解析是在parseDefaultElement(ele,delegate)方法中实现的。我们来看一下这......
  • (三)Spring源码解析:自定义标签解析
    一、使用示例步骤1:创建User实体步骤2:定义一个XSD文件描述组件内容步骤3:创建BeanDefinitionParser接口的实现类,用来解析XSD文件中的定义和组件定义。步骤4:创建NamespaceHandlerSupport实现类,目的是将组件注册到Spring容器中。步骤5:编写spring.handlers和spring.schemas文件,默认位置......
  • 聊聊如何利用spring插件来实现策略模式
    前言偶然的机会发现spring有个spring-plugin,官网对它的介绍是SpringPluginprovidesamorepragmaticapproachtoplugindevelopmentbyprovidingthecoreflexibilityofhavingpluginimplementationsextendingacoresystem'sfunctionalitybutofcoursenotdel......
  • 微信小程序集成微信支付开发,后端是springboot项目
    一、准备工作首先是进入到小程序后台关联微信支付商户、以及接入微信支付申请 二、小程序端代码主要是用到了wx.requestPaymentAPI2.1在wxml文件中添加支付按钮<buttonbindtap="requestPayment">支付</button>2.2在wxss文件中定义支付按钮样式button{backgro......