Spring IoC 的实现机制: Spring 中的 IoC 的实现原理就是工厂模式加反射机制。
核心概念 连接点,切点,切面(类),织入(动态代理对象,约定流程),五种通知,原有目标对象方法以及参数。 要对哪些类的哪些方法进行增强. 通过注解标识通知类型。
spring AOP原理:把当前方法织入某个流程中。 当然@Transacation这只是AOP的一种约定编程,被它注解的代码说明需要开启事务运行,Spring帮你把insertUser方法织入类似上图的流程中,数据库连接的打开和关闭以及事务管理都由它给你默认实现,也就是它可以将大量重复的流程通过约定的方式抽离出来,然后给与默认实现。例如这里的数据库打开释放,事务的处理和大量的try…catch…finally语句代码块。 这里没有任何数据库打开和关闭的代码,也没有事务回滚和提交的代码,却实现了数据库资源的打开和关闭以及事务的回滚和提交。(开启事务的回滚和提交) 数据库资源的打开和关闭是由谁做的? 连接点(join point ) 切点:一系列连接点,需要通过正则表达式进行匹配。
织入(weaving):它是一个通过动态代理技术,为原有服务对象生成代理对象,然后将与切点定义匹配的连接点拦截,并按照约定将各类通知织入约定流程的过程。 通过反射机制实现动态代理。 首先要确定需要拦截什么方法,让它能织入约定的流程中。 首先需要确定连接点(什么类的什么方法)的问题。要对哪一个方法增强功能? 有了连接点,我们还需要一个切面,通过它可以描述AOP的信息和流程的织入。(切面类) 切面类中使用注解标识通知的类型。
六个注解,对应五种通知类型。 环绕通知:取代原有目标对象方法的通知,提供了回调原有目标对象方法的能力。原有目标对象 切点(Pointcut):向Spring描述哪些类的哪些方法需要启动AOP编程。代码中,使用了注解@Pointcut来定义切点。 通过添加接口来增强接口的功能,检验数据是否为空? 将原目标对象方法的参数传递到前置通知里面。 织入:是一个生成动态代理对象并且将切面和目标对象方法变成成为约定流程的过程。通过约定可以将一些业务逻辑织入流程中,并且可以将一些通用的逻辑抽离出来,然后给与默认实现。 Spring采用了JDK和CGLIB实现动态代理。 Spring可以支持多个切面的运行。 现在我们想对sayHello方法进行一个拦截,再方法的前后再增加一些方法,这些增加的方法和原方法sayHello组成一套约定的流程。 约定流程。 动态代理 我们先理解一下什么是动态代理。例如,当你需要采访一名儿童时,首先需要经过他父母的同意,在一些问题上父母会替他回答,而另外一些问题,父母觉得不太适合这个小孩会替孩子拒绝掉,显然父母就是这名儿童的代理(proxy)。通过代理可以增强或者控制对真实对象的访问。代理模式的作用 来源:https://www./content-4-329901.html |
|