2017-02-28 48 views
1

我有一個應用程序(使用註釋的Spring 4 MVC + Hibernate 4 + MySQL + Maven集成示例),使用基於註釋的配置將Spring與Hibernate集成。我想從一個JoinPoint獲取bean的名字,如果有可能....Spring AOP。從JoinPoint獲取bean名稱

@Aspect 
public class TDKAspectLogger { 

    private Logger logger = Logger.getLogger(getClass()); 

    @Before(「execution(void set*(*))」) 
    public void logInfo(JoinPoint point) { 
      logger.info(「changing bean -> 」); 
    } 
} 
+2

我不是Spring用戶,所以我不太瞭解Spring bean。但如果能夠獲得課程名稱令人滿意,我可以幫助你。 – kriegaex

回答

2

您可以使用此:

Stream.of(joinPoint.getTarget().getClass().getAnnotationsByType(Service.class)) 
     .forEach(q -> logger.info(q.value())); 

通過@Service註釋所申報拿到豆。

但是,並非所有的bean都是以這種方式創建的。有些是由@Bean註釋的方法創建的,有些甚至可以手動添加到上下文中。所以,如果你使用@Component@Service@Qualifier等來註釋你的bean類,並使用@ComponentScan,你可能會得到你想要的。你只需要記住,它不是檢索上下文中當前可用的所有bean的通用方法(它不適用於沒有任何註釋/元數據的類)。