1. 程式人生 > >Spring AOP切面類依賴注入失敗問題解決

Spring AOP切面類依賴注入失敗問題解決

最近在專案中使用到了Spring AOP結合AspectJ註解為專案增加系統操作日誌記錄功能,遇到的問題是在切面類中使用註解的方式注入Service物件失敗,導致日誌記錄功能無法使用。報如下空指標異常:


第一行是日誌切面類中的方法,第二行是Controller中的方法。
我覺得應該是spring載入配置檔案時是有順序引起的,但是不知道是什麼順序。。

待解決,至今沒找到解決方法。。。

update 2017-5-25 22:11:43

目前的解決辦法是通過實現一個ApplicationContext工具類進行手動注入,不知道還有沒有更好的辦法。

package com.june.util;
 
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;
 
@Component
public class ApplicationContextUtils implements ApplicationContextAware {
     
    private static ApplicationContext applicationContext;
 
    private ApplicationContextUtils(){}
     
    @Override
    public void setApplicationContext(ApplicationContext context) throws BeansException {
        applicationContext = context;
    }
     
    public static <T> T getBean(Class<T> beanClass) {
        return applicationContext.getBean(beanClass);
    }
     
    public static <T> T getBean(String beanName, Class<T> beanClass) {
        return applicationContext.getBean(beanName, beanClass);
    }
 
}

在切面類中使用:

@Aspect
@EnableAspectJAutoProxy(proxyTargetClass = true)
public class SysOperateLogAspect {
     
    private SysOperateLogService sysOperateLogService;
     
    public SysOperateLogAspect() {
        this.sysOperateLogService = ApplicationContextUtils.getBean(SysOperateLogService.class);
    }
}

希望能找到更好的辦法。

相關推薦

Spring AOP切面依賴注入失敗問題解決

最近在專案中使用到了Spring AOP結合AspectJ註解為專案增加系統操作日誌記錄功能,遇到的問題是在切面類中使用註解的方式注入Service物件失敗,導致日誌記錄功能無法使用。報如下空指標異常

Spring AOP切面依賴注入的正確姿勢

在某些場景下需要將Spring的Bean注入到Spring AOP切面的屬性中。 類似下面程式碼: @Aspect public class SomeAspect { @Inject private SomeService someService; @Be

Spring-父變數注入失敗

         昨天遇到一個Action裡面Service注入失敗,換種說法應該說是根本沒有發生注入,本來很簡單的一個問題,但由於在專案中多個Action進行了繼承,才最終導致了這個看似奇怪的問題。下面小記下這個過程: 收到同事問題,“

Spring靜態變數不能依賴注入解決方案

          https://blog.csdn.net/persistencegoing/article/details/84376427            

自定義SpringAop切面攔截業務請求,並獲取到請求的引數名和引數值

/**  * @author 劉俊重  * @Description 稽核校驗  * 所有的service業務方法都會先走這個方法,  * 先判斷本操作需不需要稽核,如果需要稽核則插入稽核隊列表,  * 不需要稽核則直接插入相關業務表  * @date 2017年7月5日  */ @Component @As

ssh中spring向Action@Autowired注入service空指標問題解決

使用servlet注入時,上一篇博文已經解釋了,但是在使用ssh框架時,就不能用同樣的方法了。 下面是解決方案: (1)pom.xml檔案中有沒有引入struts2-spring-plugin包 <!-- https://mvnrepository.com/artifact/

對於Spring對websocket的屬性注入失敗問題,困擾我一天,最後終於解決

首先匯入包必須的: <!-- https://mvnrepository.com/artifact/org.springframework/spring-websocket --> <dependency> <groupId>

解決 Springboot中Interceptor攔截器中依賴注入失敗

BeanFactory beanFactory = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext()); userService = (UserService) bea

最全面的 Spring事務管理和AOP切面日誌的注入aop:pointcut expression解析

先來看看這個spring的配置檔案的配置:   <!-- 事務管理器 -->  <bean id="transactionManager"   class="org.springframework.orm.hibernate3.HibernateTran

使用Spring AOP切面解決資料庫讀寫分離

為了減輕資料庫的壓力,一般會使用資料庫主從(master/slave)的方式,但是這種方式會給應用程式帶來一定的麻煩,比如說,應用程式如何做到把資料寫到master庫,而讀取資料的時候,從slave庫讀取。如果應用程式判斷失誤,把資料寫入到slave庫,會給系統造成致命的

解決Springboot中Interceptor攔截器中依賴注入失敗

I want to add spring mvc interceptor as part of Java config. I already have a xml based config for this but I am trying to move to a Java

使用Spring AOP向領域模型注入依賴

在貧血領域模型這篇譯文中,Martin闡述了這種“反模式”的症狀和問題,並引用了領域驅動設計中的話來說明領域模型和分層設計之間的關係。對於Spring專案的開發人員來說,貧血領域模型十分常見:模型(或實體)僅僅包含對資料表的對映,通常是一組私有屬性和公有gett

Spring AOP introduction 級別方法織入增強

shadow intercept cda 擴展 sha oss text 都是 tor 前面描述的幾種增強(Advice)都是在目標方法範圍內織入,而引介(Introduction)不同,直接在類級別上添加目標未實現的接口方法。在Spring中可以通過擴展Delegatin

Spring AOP 切面表達式

.com text images ebe watermark image process 表達式 acea 如下註解 匹配Spring AOP 切面表達式

Spring-AOP增加新的功能

-a ring mat ctx implement 另一個 double tar targe 適配器的簡單應用實現:   比如:有一個類Car,在類中有兩個屬性一個為汽車名name,另一個為速度speed。其行為為run()。      現在有一輛車BMWCar 增加了GP

Spring 學習筆記 - IOC/依賴注入

簡述: Spring 學習 - IOC/依賴注入 1. Bean 的例項化 1) 直接使用原始類建立bean <bean id="exampleBean" class="com.anialy.test.ExampleBean" /> 2) 使用工廠方法建立

1.Spring、IOC與依賴注入

 Spring概述 Spring是分層的Java SE/EE應用 full-stack輕量級開源框架,以IoC(Inverse Of Control:反轉控制)和 AOP(Aspect Oriented Programming:面向切面程式設計)為核心,提供了展現層Spr

pojo無法注入service解決示例

pojo類無法注入service解決示例 歡迎關注作者部落格 簡書傳送門   本示例解決springboot中service無法注入普通jopo的問題。   不囉嗦,直接上程式碼。   如果該示例幫您解決了問題,請助推哦。 pojo類: package

Spring AOP代理生成錯誤

在整合的ssh時出現一個Spring  AOP代理類生成的錯誤,問題出現在配置事務的時候,切面表示式寫的範圍太大,導致執行Spring事務時候生成代理類時出現了一個錯誤 專案目錄 配置檔案 <!-- 匯入外部檔案 --> <context

二、Spring AOP 切面的定義

學習內容 Spring AOP 切面的定義 Spring AOP定義切面有多種方式,例如 1、使用@AspectJ註解 2、使用<aop:aspect>標籤 3、使用<aop:advisor>標籤 4、使用Advisor類