原创 SpringBoot+Shiro引起事務失效、錯誤原因、解決方法

一、問題 今天發現用戶註冊的Service的事務並沒有起到作用,再拋出一個RuntimeException後,並沒有發生回滾,下面是調試步驟: 1、檢查數據庫的引擎是否是innoDB 2、啓動類上是否加入@EnableTransactio

原创 Spring AOP源碼解析(一)Advisor獲取

一、入口 AOP的Jar包如下如所示: META-INF中是Spring自定義標籤的配置文件,對<aop>標籤的支持 spring.schemas配置如下,作用是定義<aop>標籤的內容(根據不同版本,Spring使用不同的xsd文件來

原创 ApplicationContext拓展功能

一、屬性設置 對於ApplicationContext,其實例化前必須要設置的就是配置文件的路徑--configLocation。例如: 對於非Web環境下的ClasspathXmlApplicationContext,需要通過構造函數或

原创 Spring AOP源碼解析(二)獲取增強器

一、方法入口 上一節中,Spring會創建兩個工廠來完成獲取增強方法的功能: AspectMetadata amd = new AspectMetadata(beanType, beanName); if (amd.getAjTyp

原创 Spring AOP源碼解析(三)創建代理並調用

一、創建代理準備工作 回顧之前的wrapIfNecessary方法,再獲取到匹配的增強器後,Spring就會爲攔截的bean創建代理對象: //獲取匹配的增強器 Object[] specificInterceptors = g

原创 Spring源碼:bean創建(四)屬性注入

一、populateBean 在創建了bean的實例後,Spring的下一步工作就是爲bean注入其依賴的屬性: protected void populateBean(String beanName, RootBeanDefinit

原创 Shiro源碼學習(四)登錄和權限鑑定

登錄Subject結構首先看下我們在使用登錄時用到的Subject結構:可以看到,這個接口的功能就是與登錄登出、權限鑑定相關;另外,這個接口被WebSubject繼承,這也是個接口,同時還繼承了RequestPairSource,爲Sub

原创 Spring源碼:Bean創建(二)createBean方法

一、獲取單例 getSingleton 創建單例bean的代碼在getSingleton中實現: //省略了日誌打印和異常捕獲的代碼 public Object getSingleton(String beanName, Objec

原创 Spring源碼:bean創建(五)解決依賴

一、resolveDependency 在上一節最後,Spring將與獲取指定相匹配的所有bean,其實現就在BeanFactory的resolveDependency中,下面是DefaultListableBeanFactory中實現:

原创 Spring源碼:bean創建(三):createBeanInstance

一、創建bean實例 在doCreateBean方法中,首先會創建bean的實例,負責創建的方法爲createBeanInstance: protected BeanWrapper createBeanInstance(String

原创 Spring整合MyBatis源碼(一)SqlSession創建

一、Spring+MyBatis配置 下面是一個常見的Spring整合MyBatis的applicationContext.xml配置: SqlSessionFactoryBean:負責解析配置文件,並實例化SqlSessionFact

原创 Web容器整合ApplicationContext源碼

一、web.xml配置開始 在使用Tomcat等容器整合Spring的時候,需要在web.xml中添加如下的配置: <!-- spring的環境監聽器 --> <listener> <listener-cla

原创 SpringBoot+Shiro引起事務失效

今天發現用戶註冊的Service的事務並沒有起到作用,再拋出一個RuntimeException後,並沒有發生回滾,下面是調試步驟: 1、檢查數據庫的引擎是否是innoDB 2、啓動類上是否加入@EnableTransactionMana

原创 Spring源碼:bean創建(六)初始化

一、注入依賴後初始化 下面是doCreateBean的部分代碼: Object exposedObject = bean; try { //填充屬性(依賴注入) populateBean(beanName, mbd,

原创 Shiro源碼學習(二)應用攔截器鏈

將配置的攔截器鏈加入到FilterChain中我們可能會在shiro中配置上圖這樣的攔截器鏈,但是像Tomcat這樣的服務器中的Filter都是需要配置在web.xml中才會生效。而在上篇文章中,我們在web.xml中只配置了一個Filt