ioc,di,aop详解

理解的话我们需要脱离Spring去看面相对象设计原则。

依赖倒置(DIP)原则是面向对象设计的主要实现机制之一。

它要求我们依赖接口编程,而不是依赖实现编程。尽量引用层次高的抽象层类,即使用接口和抽象类的形式进行变量类的声明、参数返回类型声明,以及数据类型的转换等。

但当我们在依赖抽象层编程时,需要将抽象类设置具体实例化以后的对象引用。

故引入控制反转(IoC)设计原则。控制反转是为了将具体对象的创建过程交由一个统一容器进行管理,降低代码耦合度,其关键在于容器(如Spring)。

而控制反转(IoC)的实现方法主要有两种:依赖注入(DI)和依赖查找(DL)。

依赖注入(DI)又存在常见四种方式:构造注入(构造函数)、设值注入(setter)、接口注入(对外提供传递具体实现的方法,但参数类型为抽象类型)、注解注入(外部容器扫描注解,关联引用,如:@Autowired)

依赖查找更加主动,在需要的时候通过调用框架提供的方法来获取对象,获取时需要提供相关的配置文件路径、key等信息来确定获取对象的状态。(如:Spring的ApplicationContext)

最后AOP的主要目的在于扩展、修改原有代码行为而不修改代码本身,而是通过“切入点”规范指定哪些代码需要修改。

实现AOP的技术,主要分为两大类:一是采用动态代理技术,运行期间在内存中动态生成代理类,如Java本身的Proxy动态代理,以及CGLIB等(Spring Aop使用此类方式);二是采用静态织入的方式,在运行前(如编译期间)织入代码(如AspectJ存在编译前、编译后、加载时三种织入方式)。

有帮到你的点赞、收藏一下吧

                                                                       需要更多教程,微信扫码即可

                                                                                 

                                                                                         👆👆👆

                                                        别忘了扫码领资料哦【高清Java学习路线图】

                                                                     和【全套学习视频及配套资料】
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: Spring的DI(依赖注入)和IOC(控制反转)是Spring框架中的两个核心概念。DI是指通过外部容器来注入对象的依赖关系,而不是在对象内部创建或查找依赖对象。IOC是指将对象的创建和依赖关系的管理交给容器来完成,而不是由对象自己来管理。\[1\] 在Spring中,IOC容器的初始化过程包括加载配置文件、解析配置文件、实例化Bean对象并将其存储在IOC容器中。可以通过注解来实现基于注解的容器初始化,通过在类上添加注解来标识其作为Bean,并通过注解来指定依赖关系。\[2\] AOP(面向切面编程)是Spring框架中的另一个重要概念,它允许在程序运行期间动态地将额外的行为织入到代码中,而不需要修改原始代码。AOP的实现方式包括基于代理的方式和基于字节码增强的方式。AOP的原理是通过在目标方法的前后插入切面逻辑来实现。\[2\] 在Spring中,可以通过注解来标识切面,并通过注解来指定切入点和通知类型。常用的AOP注解包括@Aspect、@Pointcut、@Before、@After等。\[3\] 总结来说,DIIOC是Spring框架中用于管理对象依赖关系的机制,而AOP是用于实现横切关注点的机制。它们都是Spring框架中重要的特性,可以帮助开发者更好地组织和管理代码。 #### 引用[.reference_title] - *1* [Spring IoCAOP的通俗理解](https://blog.csdn.net/qq_39144436/article/details/123394242)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [关于Spring 的IoCAOP的面试题,快看看你都能答上来哪些](https://blog.csdn.net/Gaowumao/article/details/124919483)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [面试汇总-Spring-IOCAOP](https://blog.csdn.net/weixin_37672801/article/details/126415598)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值