Spring底层核心原理是什么


本文小编为大家详细介绍“Spring底层核心原理是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Spring底层核心原理是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。下面这几行代码是一个Spring的入门代码,第一行是通过java配置类 注解的方式创建一个Spring容器,第二行是通免费云主机域名过XML配置文件的方式创建一个Spring容器最后两行代码就是从Spring容器中拿一个Bean对象并执行方法。那么Spring是如何创建一个Bean对象的嘞?推断构造方法,并执行得到普通对象依赖注入aware回调初始化前执行BeanPostProcessor接口中的postProcessBeforeInitialization()方法初始化执行有@PostConstruct注解的方法执行InitializingBean接口中的afterPropertiesSet()方法执行XML配置文件中init-method属性指定的方法初始化后执行BeanPostProcessor接口中的postProcessAfterInitialization()方法普通对象/代理对象 存入容器中使用销毁执行DisposableBean接口的destroy()方法有@PreDestroy注解的方法XML 配置文件中destroy-method属性指定的方法如果没有写构造方法,那么Spring会执行默认空参的构造方法如果显示写了一个构造方法,那么Spring就会使用这个构造方法,构造方法中如果有参数那么会进行依赖注入如果显示写了多个构造方法并有空参的构造方法时,会执行空参的构造方法如果显示写了多个构造方法没有空参的构造方法时,运行时会报错。解决方法是在要执行的构造方法上加@Autowired注解cjlib和jdk两种动态代理的实现都是有一个target属性来存储普通对象,代理对象中重写要执行的方法,首先执行增强逻辑,然后通过target属性去执行目标方法。伪代码如下:那么如何判断一个Bean是否需要进行AOP创建一个普通对象嘞?遍历所有有@Aspect注解的切面Bean遍历所有的方法判断方法上的切点表达式是否和当前正在创建的Bean匹配如果匹配则把这个切面中增强方法存入一个Map缓存中真正要执行代理对象的方法时会从缓存中取出相应的增强逻辑来执行,再去执行目标方法。Spring中如果要使用事务需要配置一个JdbcTemplate和一个事务管理器,它们俩都需要配置DataSource。Spring事务大致执行流程如下:判断要执行的方法上是否存在@Transcational注解如果存在则通过事务管理器创建一个connection连接对象autoCommit设置为false去执行目标方法target.method()如果出现了异常则回滚rollback(),没有异常则提交commit()如果上面的配置类中不加@Configuration注解,那么Spring的事务会失效。原因如下:JdbcTemplate和事务管理器都需要DataSource,都会调用dataSource()获取。如果不加@Configuration注解,那么他们俩获取的DataSource就不是同一个。代理对象中操作的是事务管理器的连接对象,而业务方法却是使用的JdbcTemplate,所以就导致了Spring事务失效。而如果加上了@Configuration注解,在调用dataSource()时会先去Spring容器中找DataSource,如果没找到才回去调用方法创建一个。读到这里,这篇“Spring底层核心原理是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注百云主机行业资讯频道。

相关推荐: vue组件如何接收别人传过来的值

这篇文章主要讲解了“vue组件如何接收别人传过来的值”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue组件如何接收别人传过来的值”吧! Vue是一个非常强大的JavaScript框架,它提供了一种易于理解和使…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 07/03 21:19
Next 07/03 21:19

相关推荐