Search code examples
javaspringjpaspring-dataspring-data-jpa

Spring Dependency Injection into JPA entity listener


I need to have a Spring dependency injected into a JPA entity listener. I know I can solve this using @Configurable and Spring's AspectJ weaver as javaagent, but this seems like a hacky solution. Is there any other way to accomplish what I'm trying to do?


Solution

  • Another trick is to implement an utility class with static method that helps you to use Spring beans everywhere, not only in managed classes:

    @Component
    public final class BeanUtil {
    
        private static ApplicationContext context;
    
        private BeanUtil(ApplicationContext context) {
            BeanUtil.context = context;
        }
    
        public static <T> T getBean(Class<T> clazz) throws BeansException {
    
            Assert.state(context != null, "Spring context in the BeanUtil is not been initialized yet!");
            return context.getBean(clazz);
        }
    }