2017-02-28 46 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的通用方法(它不适用于没有任何注释/元数据的类)。