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

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

springboot 實現(xiàn)bean手動注入操作

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

1、springboot啟動類實現(xiàn)接口ApplicationListener<ContextRefreshedEvent>,實現(xiàn)方法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; /** * 實現(xiàn)ApplicationContextAware接口的回調方法,設置上下文環(huán)境 * @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工廠,此時還沒有被實例化)是否有依賴關系,如果有,執(zhí)行1)步,獲取依賴的bean實例

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

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

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

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

Bean的實例化

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

springboot 實現(xiàn)bean手動注入操作

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

springboot 實現(xiàn)bean手動注入操作

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

springboot 實現(xiàn)bean手動注入操作

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

springboot 實現(xiàn)bean手動注入操作

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

springboot 實現(xiàn)bean手動注入操作

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

springboot 實現(xiàn)bean手動注入操作

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

springboot 實現(xiàn)bean手動注入操作

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

springboot 實現(xiàn)bean手動注入操作

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

springboot 實現(xiàn)bean手動注入操作

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

springboot 實現(xiàn)bean手動注入操作

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

springboot 實現(xiàn)bean手動注入操作

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

springboot 實現(xiàn)bean手動注入操作

Bean的屬性注入

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

springboot 實現(xiàn)bean手動注入操作

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

springboot 實現(xiàn)bean手動注入操作

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

springboot 實現(xiàn)bean手動注入操作

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

springboot 實現(xiàn)bean手動注入操作

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

springboot 實現(xiàn)bean手動注入操作

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

標簽: Spring
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲有吗中文字幕| 伊伊综合在线| 伊人影院久久| 午夜精品影视国产一区在线麻豆| 亚洲精品在线a| 国产日韩在线观看视频| 日韩av中文字幕一区二区| 国产日韩欧美一区二区三区| 福利视频一区| 伊人精品视频| 日本va欧美va欧美va精品| 自拍日韩欧美| 国产精品最新| 久久高清免费| 香蕉久久久久久| 国产精品1luya在线播放| 欧美性感美女一区二区| 亚洲精品乱码| 精品免费av一区二区三区| 精品在线99| 日本a级不卡| 精品国产精品国产偷麻豆| 欧美日韩精品一区二区视频| 中文字幕av一区二区三区四区| 国产精品久久久久久久久久白浆 | 在线日韩中文| 亚洲综合五月| 神马久久午夜| 亚洲精品成人一区| 成人午夜网址| 亚洲免费影视| 欧美国产专区| 亚洲激情黄色| 蜜桃精品视频| 欧美专区在线| 国产精品免费精品自在线观看| 日本精品不卡| 欧美亚洲网站| 999久久久91| 国产日产一区| 亚洲国内欧美| 美女精品久久| 日韩精品亚洲一区二区三区免费| 精品捆绑调教一区二区三区| 日韩一区网站| 99在线精品视频在线观看| 国产成人精选| 国产麻豆精品久久| 蜜臀久久99精品久久久久久9| 日本久久综合| 中文字幕免费精品| 亚洲一级网站| 亚洲黄色中文字幕| 国产精品入口久久| 午夜电影一区| 欧美日韩四区| 久久亚洲国产| 色婷婷亚洲mv天堂mv在影片| 日本在线视频一区二区| 在线成人动漫av| 国产成人精品一区二区三区免费 | 亚洲精品**中文毛片| 欧美一区成人| 欧美日韩四区| 久久在线免费| 久久三级福利| 久久精品国语| 日韩精品久久久久久久电影99爱| 国产videos久久| 嫩呦国产一区二区三区av| 日本不卡视频一二三区| 免费日本视频一区| 亚洲一卡久久| 久热精品在线| 国产美女精品| 亚洲免费一区二区| 亚洲激情社区| 久久不射中文字幕| japanese国产精品| 午夜av一区| 午夜久久久久| 美女网站久久| 蜜桃视频第一区免费观看| 一区在线免费观看| 五月天久久久| 亚洲二区三区不卡| 黄色日韩在线| 99re国产精品| 免费在线欧美视频| 亚洲一区二区三区久久久| 另类亚洲自拍| 亚洲精品网址| 久久亚洲国产精品一区二区| 日本不良网站在线观看| 风间由美中文字幕在线看视频国产欧美| 欧美成人精品午夜一区二区| 国产乱码精品一区二区三区亚洲人| 日韩激情综合| 国产精品嫩模av在线| 精品久久免费| 久久国产电影| 天堂成人免费av电影一区 | 国产精品一区二区中文字幕| 日韩中文字幕不卡| 爽爽淫人综合网网站| 亚洲一区二区小说| 国产精品久久久久久久久久齐齐| 麻豆精品在线| 日韩欧美午夜| 夜夜精品视频| 婷婷五月色综合香五月| 国产欧美午夜| 中文字幕一区久| 亚洲欧美日韩精品一区二区 | 欧美日韩日本国产亚洲在线 | 精品捆绑调教一区二区三区| 99热精品久久| 综合干狼人综合首页| 日韩成人av影视| 精品一区二区三区中文字幕在线| 国产精品成人a在线观看| 成人羞羞在线观看网站| 91久久国产| 亚洲精品人人| 精品无人区麻豆乱码久久久| 亚洲午夜精品久久久久久app| 中日韩男男gay无套| 深夜日韩欧美| 美女久久精品| 久久精品国产www456c0m| 蜜桃av一区| 牛牛精品成人免费视频| 亚洲特级毛片| 日韩不卡手机在线v区| 日韩欧美视频专区| 综合日韩在线| 激情综合五月| 极品裸体白嫩激情啪啪国产精品| 免费在线观看视频一区| 欧美国产视频| 狠狠爱成人网| 久久av国产紧身裤| 欧美日韩精品一本二本三本| 日韩激情网站| 欧美中文一区二区| 亚州欧美在线| 日韩免费福利视频| 日本中文字幕视频一区| 久久久精品五月天| 国产精品亚洲综合色区韩国 | 午夜一级久久| 91麻豆国产自产在线观看亚洲| 男人的天堂久久精品| 老牛影视精品| 国产日韩欧美一区二区三区在线观看| 亚洲一级网站| 国产一区二区三区91| 日韩高清二区| 国产一区导航| 国产一区二区三区日韩精品| 亚洲乱码一区| 免费久久久久久久久| 国产91欧美| 国产精品一区二区av交换| 日韩中文字幕亚洲一区二区va在线 | 热久久免费视频| а√天堂8资源中文在线| 日欧美一区二区| 日本在线不卡视频一二三区| 激情欧美一区| 欧美激情麻豆| 日本视频一区二区| 亚洲一区二区日韩| 免费久久精品| 激情亚洲影院在线观看| 久久一区国产| 欧美日本一区| 亚洲免费专区| 亚洲一区二区小说| 快she精品国产999| 亚洲一区二区三区高清| 午夜av一区| 欧美91视频| 成人看片网站| 日韩黄色大片| 精品国产乱码久久久| 国产精品超碰| 国产精品草草| 国产精品美女午夜爽爽| 91精品国产自产在线丝袜啪| 综合激情婷婷| 日韩三级久久| 日本少妇精品亚洲第一区| 日本不卡一区二区三区| 少妇精品久久久一区二区三区| 爽爽淫人综合网网站| 天堂成人国产精品一区| 免费在线欧美视频| 亚洲青青久久| 日韩激情啪啪|