春天AOP。从JoinPoint获取bean名称

时间:2017-02-28 22:50:25

标签: java spring aop spring-aop

我有一个应用程序(使用注释的Spring 4 MVC + Hibernate 4 + MySQL + Maven集成示例),使用基于注释的配置将Spring与Hibernate集成。如果可能的话,我想从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 -> ” );
    } 
}

1 个答案:

答案 0 :(得分:2)

您可以使用:

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

获取由@Service注释声明的bean。

但是,并非所有bean都是以这种方式创建的。有些是由@Bean带注释的方法创建的,有些甚至可以手动添加到上下文中。因此,如果您使用@Component@Service@Qualifier等注释您的bean类并使用@ComponentScan,您可能会得到您想要的内容。您只需要记住,它不是检索上下文中当前可用的所有bean的通用方法(对于没有任何注释/元数据的类,它将不起作用)。