《IOC》
控制反转:
反转了依赖关系的满足方式,之前由自己创建对像,变由为工厂推送,变主动为被动即为反转。
解决具有依赖关系的组件之间的强耦合,使得项目形态更稳健。
DI依赖注入:
在Spring创建对象的同时,为其属性赋值,称之为依赖注入。
创建对象时,Spring工厂会通过set方法为对象的属性赋值。
构造注入:
自动注入:
不用在配置中指定为那个属性赋值,赋什么值,由Spring自动根据某个“原则”,在工厂中查找一个Bean为属性注入属性值。
《AOP》
所谓切面,简单地说就是那些与业务无关 却为业务模块所共用的逻辑或责任封装起来。
便于减少系统的重复代码,降低了模块之间的耦合度。并有利于未来的操作行,可维护性。
《AOP应用场景》
应用场景:权限、缓存、内容传递、错误处理、懒加载、调试、持久化、性能优化、资源池、同步、事务。
如何使用:AOP?
1、通过配置
2、也可以通过编码直接使用代理工厂提供的方法可以设置目标对象, 最终获取代理的方法来获取代理对象
《AOP使用》
AOP指的是在程序运行期间动态的将某段代码切入到指定方法指定位置进行运行的编程方式
要在项目中提供Spring AOP功能,需要导入相关的依赖包。
比如:有一个业务,我们需要使用AOP在这个业务的执行前后记录一些日志
定义一个日志切面类,切面类里面的方法需要动态感知业务方法运行到哪个步骤。
这个是通过通知方法控制:有前置通知,后置通知,返回通知,异常通知,环绕通知。
将切面类和业务逻辑类都加入到容器中。
使用@Aspect注解告诉Spring哪个类是切面类:
给配置类中加上@EnableAspectJAutoProxy注解开启基于注解的AOP模式。
在junit测试类中执行业务方法
AOP代理设计模式:
将核心功能 与 辅助功能分离,达到核心业务功能更纯粹 辅助业务功能可复用。
AOP术语:
1.通知(Advice)
就是你想要的功能,也就是上面说的 安全,事物,日志等。你给先定义好,然后在想用的地方用一下。
2.连接点(JoinPoint)
就是spring允许你使用通知的地方,基本每个方法的前,后(两者都有也行),或抛出异常时都可以是连接点,spring只支持方法连接点.
3.切入点(Pointcut)
上面说的连接点的基础上,来定义切入点,在调用这几个方法之前,之后或者抛出异常时干点什么,那么就用切点来定义这几个方法,让切点来筛选连接点
4.切面(Aspect)
切面是通知和切入点的结合。现在发现了吧,没连接点什么事情,连接点就是为了让你好理解切点,搞出来的,明白这个概念就行了。通知说明了干什么和什么时候干(什么时候通过方法名中的before,after,around等就能知道),而切入点说明了在哪干(指定到底是哪个方法),这就是一个完整的切面定义。
5.引入(introduction)
允许我们向现有的类添加新方法属性。这不就是把切面(也就是新方法属性:通知定义的)用到目标类中吗
6.目标(target)
引入中所提到的目标类,也就是要被通知的对象,也就是真正的业务逻辑,他可以在毫不知情的情况下,被咱们织入切面。而自己专注于业务本身的逻辑。
7.代理(proxy)
实现整套aop机制的,都是通过代理。spring用代理类包裹切面,把他们织入到Spring管理的bean中。也就是说代理类伪装成目标类,它会截取对目标类中方法的调用,让调用者对目标类的调用都先变成调用伪装类,伪装类中就先执行了切面,再把调用转发给真正的目标bean。
8.织入(weaving)
把切面应用到目标对象来创建新的代理对象的过程。有三种(先不说)。
关键就是:切点定义了哪些连接点会得到通知
《AOP的好处》
通过动态代理类为原始类的方法添加辅助功能,通过AOP提供的编码流程,更便利的定制切面更方便的定制了动态代理。
解决了辅助功能冗余的问题,业务类中职责单一性得到更好的保障;辅助功能也有了很好的复用性。
1、各个步骤之间的良好隔离性
2、源代码无关性