Spring的DI和AOP

基于POJO的轻量级和最小入侵性编程

POJO–简单的java对象。
释义:
Spring不会强迫你继承他的类或者实现它的接口,最坏的情况就是使用Spring的注解;
使用非侵入性编程这样我们不论是在Spring应用还是非Spring应用中都能够发挥同样的作用;
Spring通过DI来帮助应用对象实现松耦合;
两个简单的例子比较:
这里写图片描述
而通过DI,在对象创建的时候,第三方的插件进行管理它们的以来关系进行设定,依赖关系将会被自动注入到需要他们的对象当中去;

这里写图片描述
不同于之前的自行创建,而是传入构造参数,这是依赖方式之一:①构造注入

Spring通常使用基于XML 或者基于java的配置来装配(装配–组建之间的协作);

通过ApplicationContext容器来读取代码运行时的上下文,来生成对应的bean,来解耦;
这里写图片描述

这里额外提一下注入外部的值:
这里写图片描述

DI能够让互相协作的组织保持松散耦合,AOP则是允许你把遍布应用各处的功能分离起来(大部分为横切关注点:事务,日志,安全等…)形成可用组件:
这里写图片描述

一个简单的AOP服务:
这里写图片描述

根据上文我们知道DI通过ApplicationContext容器实现,那么同样,实现aop的配置我们应该也可以基于JAVA或者XML的配置实现,这里我我只给出xml:
这里写图片描述
(自行百度AspectJ切点表达式语法,java方式:@Aspect声明类为切面,@Pointcut(“execution(* *.saying(..))”)定义切点)
利用AOP我们可以更好的达到业务代码的纯洁性;
同时因为Spring是基于动态代理,所以Spring只支持方法连接点,这一点与其他AOP框架是不同的,无法支持创建细粒度的通知;

怎样理解AOP和DI的关系:
通过在代理类中包裹切面,Spring在运行时期把切面织入到Spring管理的bean中,代理类封装了目标类,并拦截被通知的方法调用,再把调用转发给真正的目标bean;
即:直到应用需要被代理的bean时,Spring才创建代理对象,因为Spring是运行时才创建代理对象,所以我们不需要特殊的编译器(ApplicationContext 从BeanFactory中加载所有bean的时候)来织入Spring AOP切面。
如下图:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值