getBeansOfType afterPropertiesSet

博客介绍了Spring相关的两个知识点。一是appContext.getBeansOfType()方法,它返回map类型实例,有两种重载形式,可获取某类所有bean;在TaskServiceImpl中用此方法获取继承UserTaskProcessor接口的bean。二是afterPropertiesSet()方法,实现InitializingBean接口时初始化bean会执行,还有init - method和@postconstruct注解有类似功能。

知识点1:appContext.getBeansOfType()方法。

key位 bean name,value为实例
该方法返回一个map类型的实例,map中的key为bean的名字,key对应的内容未bean的实例。

该方法有两种类型的重载:
getBeansOfType(Class),获取某一类的所有的bean。

getBeansOfType(Class,boolean,boolean),后面两个布尔值,第一代表是否也包含原型(Class祖先)bean或者或者只是singletons(包含FactoryBean生成的),第二个表示是否立即实例化懒加载或者由FactoryBean生成的Bean以保证依赖关系。

在TaskServiceImpl中,我们通过这个方法取得所有继承UserTaskProcessor接口的bean,然后通过accept(code)方法判断具体调用哪个实例化的bean。

知识点2:

afterPropertiesSet()方法。

初始化bean的时候执行该方法,前提是实现InitializingBean接口。

实现类似功能的还有init-method方法,需要在需要在applicationContext.xml配置文档中bean的定义里头写明。例如:<bean id="TestBean" class="xxx.util.TestBean" init-method="init"></bean>,初始化的时候会执行TestBean的init方法。

执行顺序:先执行afterPropertiesSet()方法,然后执行init-method()方法。

不过init-method()方法需要在配置文件配置,和现在普遍使用注解不符。

还有一个@postconstruct注解也有类似功能。

相反的DisposableBean提供销毁前的调用方法。
 

java.lang.NullPointerException: null at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1683) at com.alibaba.druid.pool.DruidAbstractDataSource.createPhysicalConnection(DruidAbstractDataSource.java:1803) at com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:924) at com.alibaba.druid.spring.boot.autoconfigure.DruidDataSourceWrapper.afterPropertiesSet(DruidDataSourceWrapper.java:51) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1863) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1800) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:620) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542) at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:336) at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234) at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:334) at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:209) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:673) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeansOfType(DefaultListableBeanFactory.java:661) at org.springframework.context.support.AbstractApplicationContext.getBeansOfType(AbstractApplicationContext.java:1317) at com.risen.base.dyna.conf.encrypt.EncoderFactory.init(EncoderFactory.java:246) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflec
最新发布
03-19
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值