spring之InitializingBean接口的使用
程序员文章站
2022-03-19 10:56:56
...
//记录几个spring的接口以及使用 //从名字可以看出来这个接口主要用于初始化bean用。在bean被初始化后就会执行afterPropertiesSet方法。 public interface InitializingBean { void afterPropertiesSet() throws Exception; } //其实现原理如下该方法在AbstractAutowireCapableBeanFactory中 protected void invokeInitMethods(String beanName, final Object bean, RootBeanDefinition mbd) throws Throwable { //判断是否实现了InitializingBean接口 boolean isInitializingBean = (bean instanceof InitializingBean); if (isInitializingBean && (mbd == null || !mbd.isExternallyManagedInitMethod("afterPropertiesSet"))) { if (logger.isDebugEnabled()) { logger.debug("Invoking afterPropertiesSet() on bean with name '" + beanName + "'"); } if (System.getSecurityManager() != null) { try { AccessController.doPrivileged(new PrivilegedExceptionAction<Object>() { @Override public Object run() throws Exception { //执行afterPropertiesSet ((InitializingBean) bean).afterPropertiesSet(); return null; } }, getAccessControlContext()); } catch (PrivilegedActionException pae) { throw pae.getException(); } } else { //执行afterPropertiesSet ((InitializingBean) bean).afterPropertiesSet(); } } if (mbd != null) { String initMethodName = mbd.getInitMethodName(); if (initMethodName != null && !(isInitializingBean && "afterPropertiesSet".equals(initMethodName)) && !mbd.isExternallyManagedInitMethod(initMethodName)) { invokeCustomInitMethod(beanName, bean, mbd); } } } /** 所以我们在写框架的时候如果要进行一些初始化工作就可以实现InitializingBean接口。 */
上一篇: PHP脚本的10个技巧(4)_php基础
推荐阅读
-
详解java整合solr5.0之solrj的使用
-
java线程之使用Runnable接口创建线程的方法
-
Spring Cache的基本使用与实现原理详解
-
spring cloud 之 Feign 使用HTTP请求远程服务的实现方法
-
Android 开发之Dialog中隐藏键盘的正确使用方法
-
使用IntelliJ IDEA 2017.2.5 x64中的Spring Initializr插件快速创建Spring Boot/Cloud工程(图解)
-
详解Spring Boot下Druid连接池的使用配置分析
-
Android开发之WebView组件的使用解析
-
浅谈Spring的属性编辑器的使用
-
Spring常用注解 使用注解来构造IoC容器的方法