日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

springboot 實現bean手動注入操作

瀏覽:30日期:2023-03-27 13:50:23

1、springboot啟動類實現接口ApplicationListener<ContextRefreshedEvent>,實現方法onApplicationEvent,初始化上下文

package test.projectTest;import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.EnableAutoConfiguration;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;import org.springframework.boot.autoconfigure.jdbc.DataSourceTransactionManagerAutoConfiguration;import org.springframework.boot.system.ApplicationPidFileWriter;import org.springframework.context.ApplicationListener;import org.springframework.context.event.ContextRefreshedEvent;import test.projectTest.util.SpringContextUtil;@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class,DataSourceTransactionManagerAutoConfiguration.class, MybatisAutoConfiguration.class})@SpringBootApplication(scanBasePackages={'test.projectTest'})public class TestApplication implements ApplicationListener<ContextRefreshedEvent>{ public static void main( String[] args ) { SpringApplication application = new SpringApplication(TestApplication.class); application.addListeners(new ApplicationPidFileWriter()); application.run(args); System.out.println( '啟動成功' ); } @Override public void onApplicationEvent(ContextRefreshedEvent event) { SpringContextUtil.setApplicationContext(event.getApplicationContext()); }}

2.SpringContextUtil工具類初始化ApplicationContext applicationContext

package test.projectTest.util;import org.springframework.context.ApplicationContext;/** * 獲取spring容器,以訪問容器中定義的其他bean */public class SpringContextUtil{ //spring上下文 private static ApplicationContext applicationContext; /** * 實現ApplicationContextAware接口的回調方法,設置上下文環境 * @param applicationContext */ public static void setApplicationContext(ApplicationContext applicationContext){ if(null==SpringContextUtil.applicationContext) SpringContextUtil.applicationContext=applicationContext; } public static ApplicationContext getApplicationContext(){ return applicationContext; } /** * 通過name獲取 Bean. * * @param name * @return */ public static Object getBean(String name) { return getApplicationContext().getBean(name); } /** * 通過name獲取 Bean. * * @param clazz * @return */ public static <T> T getBean(Class<T> clazz) { return getApplicationContext().getBean(clazz); } /** * 通過name,以及Clazz返回指定的Bean * * @param name * @param clazz * @return */ public static <T> T getBean(String name, Class<T> clazz) { return getApplicationContext().getBean(name, clazz); }}

3.獲取bean

package test.projectTest.util;import test.projectTest.mapper.slave.DailyDataMapper;public class TestUtil{ private static DailyDataMapper dailyDataMapper; static{//手動注入bean if(dailyDataMapper==null){ dailyDataMapper = (DailyDataMapper)SpringContextUtil.getBean('dailyDataMapper'); } } public static void test(){ dailyDataMapper.selectByPrimaryKey(1); } }

補充:springboot中bean的實例化和屬性注入過程

springboot版本(2.0.4 RELEASE)

大致描述springboot中bean的實例化和屬性注入過程流程

1) 在某一時刻Spring調用了Bean工廠的getBean(beanName)方法。beanName可能是simpleController,或者simpleService,simpleDao,順序沒關系(因為后面會有依賴關系的處理)。我們假設simpleController吧

2)getBean方法首先會調用Bean工廠中定義的getSingleton(beanName)方法,來判斷是否存在該名字的bean單例,如果存在則返回,方法調用結束(spring默認是單例,這樣可以提高效率)

3) 否則,Spring會檢查是否存在父工廠,如果有則返回,方法調用結束

4) 否則,Spring會檢查bean定義(BeanDefinition實例,用來描述Bean結果,component-scan掃描后,就是將beanDefinition實例放入Bean工廠,此時還沒有被實例化)是否有依賴關系,如果有,執行1)步,獲取依賴的bean實例

5) 否則,Spring會嘗試創建這個bean實例,創建實例前,Spring會檢查調用的構造器,并實例化該Bean,(通過Constructor.newInstance(args)進行實例化)

6) 實例化完成后,Spring會調用Bean工廠的populateBean方法來填充bean實例的屬性,也就是自動裝配。populateBean方法便是調用了BeanPostProcessor實例來完成屬性元素的自動裝配工作

7)在元素裝配過程中,Spring會檢查被裝配的屬性是否存在自動裝配的其他屬性,然后遞歸調用getBean方法,知道所有@Autowired的元素都被裝配完成。如在裝配simpleController中的simpleService屬性時,發現SimpleServiceImpl實例中存在@Autowired屬性simpleDao,然后調用getBean(simpleDao)方法,同樣會執行1)----7)整個過程。所有可以看成一個遞歸過程。

8)裝配完成后,Bean工廠會將所有的bean實例都添加到工廠中來。

Bean的實例化

1. 進入SpringApplication類中refreshContext()方法

springboot 實現bean手動注入操作

2. 進入AbstractApplicationContext類中refresh()方法,找到this.finishBeanFactoryInitialization()方法,這個方法就是完成beanFactory的實例化

springboot 實現bean手動注入操作

3. 進入AbstractApplicationContext類中finishBeanFactoryInitialization()方法,找到preInstantiateSingletons()

springboot 實現bean手動注入操作

4. 進入DefaultListableBeanFactory類中preInstantiateSingletons()方法,找到getBean()方法

springboot 實現bean手動注入操作

5. 進入AbstractBeanFactory類中getBean()方法,找到doGetBean()方法

springboot 實現bean手動注入操作

6. 在AbstractBeanFactory類中doGetBean方法中,找到createBean()方法

springboot 實現bean手動注入操作

7. 進入AbstractAutowireCapableBeanFactory類中createBean方法中,找到doCreateBean()方法

springboot 實現bean手動注入操作

8. 在AbstractAutowireCapableBeanFactory類中doCreateBean()方法中,找到createBeanInstance()方法,看名字就知道是實例化bean的

springboot 實現bean手動注入操作

9. 在AbstractAutowireCapableBeanFactory類createBeanInstance()方法中,找到instantiateBean()方法

springboot 實現bean手動注入操作

10. 在AbstractAutowireCapableBeanFactory類instantiateBean()方法中,找到instantiate()方法

springboot 實現bean手動注入操作

11. 在SimpleInstantiationStrategy類instantiate()方法中,找到instantiateClass()方法

springboot 實現bean手動注入操作

12. 在BeanUtils類instantiateClass()方法中,可知bean的實例化是通過Constructor.newInstance()進行實例化

springboot 實現bean手動注入操作

Bean的屬性注入

1. 在AbstractAutowireCapableBeanFactory類doCreateBean()方法中,找到populateBean()方法,從名字可知是用來填充bean的

springboot 實現bean手動注入操作

2. 在AbstractAutowireCapableBeanFactory類中populateBean()方法,找到postProcessPropertyValues()方法

springboot 實現bean手動注入操作

3. 進入AutowiredAnnotationBeanPostProcessor類中postProcessPropertyValues()方法中,找到findAutowiringMetadata()方法,在這個方法中,如果屬性中含有@Autowired注解則會遞歸getBean()。沒有然后進入inject()方法中

springboot 實現bean手動注入操作

4. 進入AutowiredAnnotationBeanPostProcessor類inject方法中,找到resolveDependency()方法,通過這個方法獲取對應字段的值

springboot 實現bean手動注入操作

5. 進入AutowiredAnnotationBeanPostProcessor類inject方法中,找到field.set(bean, value)方法,通過反射將值設置到屬性中

springboot 實現bean手動注入操作

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲色诱最新| 92国产精品| 美女黄网久久| 天堂av在线一区| 国产精品美女久久久浪潮软件| 色偷偷偷在线视频播放| 麻豆精品蜜桃| 久久人人99| 欧美 日韩 国产精品免费观看| 99成人超碰| 亚洲欧洲一区二区天堂久久| 宅男噜噜噜66国产日韩在线观看| 国产精品91一区二区三区| 亚洲黄色在线| 蜜桃视频免费观看一区| 日日夜夜免费精品视频| 日本麻豆一区二区三区视频| 国产欧美一区二区三区精品观看| 欧美日本二区| 老司机精品视频在线播放| 成人午夜网址| 不卡福利视频| 亚洲中字黄色| 国产精品久久久久久模特 | 激情综合五月| 香蕉视频亚洲一级| 久久亚洲风情| 国产精品一区三区在线观看| 高清av一区| 日韩午夜精品| 久久精品99国产国产精| 9999国产精品| 1024精品一区二区三区| 日韩视频一区| 国产精品亚洲四区在线观看 | 国产成人黄色| 亚洲韩日在线| 亚洲人成网77777色在线播放| 国产精品久久久久久久久久久久久久久 | 五月天激情综合网| 亚洲精品影院在线观看| 久久99精品久久久久久园产越南| 日韩1区2区| 老鸭窝毛片一区二区三区| 国产精品亚洲综合色区韩国| 亚洲天堂1区| 日韩精品社区| 日本免费久久| 欧美日一区二区三区在线观看国产免 | 嫩呦国产一区二区三区av| 免费高潮视频95在线观看网站| 国产色综合网| 久久精品国产福利| 91久久黄色| 国产精品xxxav免费视频| 国产99亚洲| 国产欧美88| 日韩午夜av| 动漫av一区| 鲁大师成人一区二区三区| 麻豆成人在线观看| 免费日韩av片| 97精品国产| 91久久精品无嫩草影院| 日本韩国欧美超级黄在线观看| 亚洲永久精品唐人导航网址| 国产精品毛片久久| 日韩高清二区| 亚洲免费黄色| av中文资源在线资源免费观看| 亚洲精品国模| 亚洲婷婷在线| 嫩草伊人久久精品少妇av杨幂| 国产精品毛片一区二区三区| 国产精品99一区二区三| 日本不卡一二三区黄网| 欧洲激情综合| 久久久久久色| 亚洲精品成人| 激情综合婷婷| 婷婷久久免费视频| jiujiure精品视频播放| 高清不卡一区| 国产精品va| 日韩精品第二页| 日韩一区二区免费看| 日韩一区三区| 欧美a在线观看| 日韩av中文字幕一区二区| jiujiure精品视频播放| 国产高潮在线| 捆绑调教美女网站视频一区| 五月国产精品| 视频一区视频二区在线观看| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 久久99久久人婷婷精品综合| 一区二区三区国产在线| 午夜精品婷婷| 私拍精品福利视频在线一区| 精品视频在线一区二区在线| 国产精品午夜一区二区三区| 亚洲人妖在线| 久热re这里精品视频在线6| 国产精品99免费看| 日韩在线观看| 中文字幕色婷婷在线视频| 国产亚洲久久| 日本欧美大码aⅴ在线播放| 亚洲综合福利| 日韩中文字幕区一区有砖一区 | 黄色免费成人| 99成人超碰| 亚洲国内欧美| 91久久亚洲| 久久不射中文字幕| 香蕉久久久久久久av网站| 国产偷自视频区视频一区二区| 亚洲成人二区| 亚洲国产专区| 午夜av成人| 蜜桃一区二区三区| 午夜国产精品视频| 久久99伊人| 日本在线不卡视频| 欧美日韩1区2区3区| 日本欧美一区二区| 国产精品一区二区免费福利视频| 国产精选一区| 久久精品国内一区二区三区| 久久精品一本| 在线观看精品| 91精品91| 在线精品视频一区| 婷婷综合一区| 日韩高清一区二区| 国产精品传媒麻豆hd| 久久中文精品| 国产精品久久久久蜜臀| 91精品国产乱码久久久久久久 | 日韩精品1区2区3区| 97久久亚洲| 韩国女主播一区二区三区| 五月激情久久| 国产一区二区精品| 亚洲免费专区| 国产欧美一区二区三区国产幕精品| 欧美黑人巨大videos精品| 色爱综合网欧美| 亚洲成人不卡| 99在线精品免费视频九九视| 中文字幕乱码亚洲无线精品一区| 欧美精品三级在线| 首页国产精品| 91精品国产乱码久久久久久久 | 亚洲资源在线| 热久久久久久| 国产成人免费视频网站视频社区| 日韩精品影视| 蜜桃av一区二区| 国产精品视频一区二区三区四蜜臂 | 亚洲91精品| 国产精品丝袜xxxxxxx| 日韩国产一区二| 97精品视频在线看| 国产精品老牛| 国产精品99久久久久久董美香| 98精品久久久久久久| 伊人久久成人| 国产精品伊人| 婷婷成人基地| 国产欧美综合一区二区三区| 日韩欧美一区二区三区在线视频| 视频一区二区中文字幕| 国产精品99精品一区二区三区∴| 秋霞国产精品| 日本亚洲最大的色成网站www| 国产精品亚洲一区二区在线观看 | 精品高清久久| 国产国产精品| 国产劲爆久久| 国产在线欧美| 国产精品丝袜在线播放| 欧美福利专区| 久久精品av麻豆的观看方式| 人人精品亚洲| 欧美一区网站| 亚洲二区精品| 国产乱人伦精品一区| 91九色精品| 精品视频一区二区三区在线观看 | 日韩中文av| 久久精选视频| 国产激情欧美| 免费在线观看视频一区| 四虎成人av| 91精品日本| 久久亚洲电影| 秋霞国产精品| 久久不见久久见国语| 蜜芽一区二区三区|