向Spring IOC容器动态注册bean实现方式是什么


本篇内容主要讲解“向SpringIOC容器动态注册bean实现方式是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“向SpringIOC容器动态注册bean实现方式是什么”吧!这周遇到了这样一个需求,从第三方的数据库中获取值,只是一个简单的分页查询,处理这种问题,我一般都是在配置文件中配置数据库的地址等相关信息,然后在Spring Configuration 注册数据量连接池的bean,然后再将数据库连接池给JdbcTemplate, 但是这种的缺陷是,假设填错了数据库地址和密码,或者换了数据库的地址和密码,在配置文件里面重启之后,都需要重启应用。我想能不能动态的向Spring IOC容器中注册和加载bean呢,项目在界面上填写数据库的地址、用户名、密码,存储之后,将JdbcTemplate和另一个数据库连接池加载到IOC容器中。答案是可以的,我经过一番搜索写出了如下代码:结果:我们就到这里了吗? 我们观察一下上面将一个bean加载到Spring IOC容器里经过了几步:BeanDefineBuilder 构造BeanDefinition然后BeanDefinitionRegistry将其注册到IOC容器中。(这一步事实上只完成了注册,还未完成Bean的实例化,属性填充)联系我们前面的文章《Spring Bean 的生命周期》,我们将Spring 的生命周期理解为“Spring 给我们提供的一些扩展接口,如果bean实现了这些这些接口,应用在启动的过程中会回调这些接口的方法。” , 这个理解并不完善,缺少了解析BeanDefinition这个阶段。那BeanDefinition是什么? BeanDefinition是一个接口,我们进Spring 官网(https://docs.spring.io/spring…)大致看一下:bean 的定义信息可以包含许多配置信息,包括构造函数参数,属性值和特定于容器的信息,例如初始化方法,静态工厂方法名称等。子 bean 定义可以从父 bean 定义继承配置数据。子 bean 的定义信息可以覆盖某些值,或者可以根据需要添加其他值。使用父 bean 和子 bean 的定义可以节省很多输入(实际上,这是一种模板的设计形式)。这段说的可能有点抽象, 你点BeanDefinition进去,你就会发现有很多熟悉的面孔:Bean的作用域: 单例,还是多例。lazyInit是否是懒加载。这些都是描述Spring Bean的信息,我们可以类比到Java中的类,每个类都会有class属性,我们在配置类或者xml中的配置Bean的元信息,也被映射到这里。供IOC容器将Bean加入时使用。所以我们可以为对Spring Bean的生命周期的理解打一个补丁:从xml或配置类中解析BeanDefintionBeanDefinition 注册,此时还未完成Bean的实例化。我们可以打断点来验证一下:Bean 实例化Bean的属性赋值+依赖注入Bean的初始化阶段的方法回调Bean的销毁。我们这里再来总结一下一个Bea免费云主机域名n注入Spring IOC容器的几种形式:启动时加入配置类: @Configuration+@Bean配置文件: xml注解形式@Component@Service@Controller@Repository@import@Qualifier@Resource@Inject运行时加入这三种最终都是通过BeanDefinitionRegistry来注入的,ImportBeanDefinitionRegistrar是一个接口,留给我们实现的方法如下:ImportBeanDefinitionRegistrar手动构造BeanDefinition注入(我们上面就是自己手动构造BeanDefinition注入)借助BeanDefinitionRegistryPostProcessor注入BeanDefinitionRegistryPostProcessor也是一个接口,留给我们实现的方法如下:到此,相信大家对“向SpringIOC容器动态注册bean实现方式是什么”有了更深的了解,不妨来实际操作一番吧!这里是百云主机网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

相关推荐: jquery如何求高度

这篇文章主要介绍“jquery如何求高度”,在日常操作中,相信很多人在jquery如何求高度问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”jquery如何求高度”的疑惑有所帮助!接下来,请跟着小编一起来学习吧! 方法:1、用“$…

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

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 03/20 22:01
下一篇 03/20 22:02

相关推荐