【SpringBoot】在普通类中获取spring容器中的bean
这段时间公司搞封闭开发,做⼀个联通总部的客服系统项⽬,是基于springboot的。在开发⼯程中遇到⼀个页⾯datagrid数据排序的功能,因为有多个表的数据都要⽤到排序功能,于是我就写了⼀个排序功能的公共实现类,⽅便⼤家使⽤。在写实现类的过程中学习了在普通类中获取spring容器中的bean的⽅法。spring到底是干啥的
如果我们需要在⼀个类中使⽤spring提供的bean对象,那么我们需要把这个bean注⼊到spring容器中,交给spring容器来管理。但是在实际应⽤中我们往往会碰到在普通的java类中,需要直接使⽤spring提供的对象或者说有⼀些对象不需要交给spring容器来管理,但是需要⽤到spring容器中的⼀些对象。
如果这是spring框架的独⽴应⽤程序,我们通过ApplicationContext对象即可获取到:
ApplicationContext applicationContext = new FileSystemXmlApplicationContext("l");
但是在实际应⽤中,我们做的项⽬⼤多是web application,在web application中我们启动spring容器是通过在l中进⾏配置,这样就不适合使⽤上⾯的⽅式在普通类去获取对象了,因为这样做就相当于
加载了两次spring容器,⽽我们想是否可以通过在启动web服务器的时候,就把Application放在某⼀个类中,我们通过这个类在获取,这样就可以在普通类获取spring bean对象了。
在springboot中有⼀种实现⽅式,可以很⽅便的获取到ApplicationContext对象:SpringBoot平台下采⽤ApplicationContextAware的⽅式完成ApplicationContext实例的获取,并通过ApplicationContext实例完成对Spring管理的Bean实例⼿动获取。
创建⼀个实体类SpringUtil并实现ApplicationContextAware接⼝,重写接⼝内的setApplicationContext⽅法来完成获取ApplicationContext实例的⽅法。
如下为ApplicationContextAware接⼝:
具体实现请参见我的Github:
注意两个地⽅:
1、SpringUtil类上的 @Component注解必须要有,否则spring就不会⾃动调⽤setApplicationContext⽅法来为我们设置上下⽂实例;
2、SpringUtil类要在springboot可以扫描到的包下;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论