1. 程式人生 > >spring的InitializingBean的 afterPropertiesSet 方法 和 init-method配置的 區別聯絡

spring的InitializingBean的 afterPropertiesSet 方法 和 init-method配置的 區別聯絡

//……//在一個bean的合作者裝置完成後,執行一個bean的初始化方法。protectedvoid invokeInitMethods(String beanName, Object bean, RootBeanDefinition mergedBeanDefinition) throws Throwable { //判斷bean是否實現了InitializingBean介面if (bean instanceof InitializingBean) {if (logger.isDebugEnabled()) {logger.debug("Invoking afterPropertiesSet() on bean with name '"+ beanName +"'");} //
呼叫afterPropertiesSet方法((InitializingBean) bean).afterPropertiesSet();} //判斷bean是否定義了init-methodif(mergedBeanDefinition!=null&&mergedBeanDefinition.getInitMethodName() !=null) {//呼叫invokeCustomInitMethod方法來執行init-method定義的方法invokeCustomInitMethod(beanName, bean, mergedBeanDefinition.getInitMethodName());} } //
執行一個bean定義的init-method方法protectedvoid invokeCustomInitMethod(String beanName, Object bean, String initMethodName)throws Throwable { if (logger.isDebugEnabled()) {logger.debug("Invoking custom init method '"+ initMethodName +"' on bean with name '"+ beanName +"'");} //使用方法名,反射Method物件Method initMethod = BeanUtils.findMethod(bean.getClass(), initMethodName, null
);if (initMethod ==null) {thrownew NoSuchMethodException("Couldn't find an init method named '"+ initMethodName +"' on bean with name '"+ beanName +"'");} //判斷方法是否是publicif (!Modifier.isPublic(initMethod.getModifiers())) {//設定accessible為true,可以訪問private方法。 initMethod.setAccessible(true);} try {//反射執行這個方法initMethod.invoke(bean, (Object[]) null);} catch (InvocationTargetException ex) {throw ex.getTargetException();} } //………..