Spring容器初始化完成后,調(diào)用BeanPostProcessor這個(gè)類,這個(gè)類實(shí)現(xiàn)ApplicationListener接口,重寫onApplicationEvent方法,
方法中就是我們自己要在容器初始化完成后加載的數(shù)據(jù)或者緩存。
下面是XML配置:
下面是自己寫的BeanPostProcessor類:
下面是啟動(dòng)Tomcat后,重復(fù)加載了數(shù)據(jù),調(diào)用了兩次onApplicationEvent方法:
藍(lán)色部分中的:
Root WebApplicationContext和WebApplicationContext(spring-servlet)兩個(gè)容器。
下面是初始化全國(guó)地區(qū)信息的時(shí)候加載了兩次:
Returning JDBC Connection to DataSource前面已經(jīng)加載了一次地區(qū)信息,然后又Fetching JDBC Connection from DataSource又加載了一次。
問(wèn)了度娘:雖然有方法,但試過(guò)以后還是沒(méi)有解決這個(gè)問(wèn)題。
方法一:
在onApplicationEvent()方法中添加判斷,
==null,然后判斷里面執(zhí)行你要初始化的或者是緩存的代碼。
方法二:
字符串值比較equals("Root WebApplicationContext")。
方法三:
在事件參數(shù)前面加上final, final ContextRefreshedEvent event。
最終暫時(shí)還是沒(méi)有解決問(wèn)題,也許可以解決大家的這個(gè)問(wèn)題,先寫下來(lái)。