/*
* Hibernate Search, full-text search for your domain model
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or <http://www.gnu.org/licenses/lgpl-2.1.html>.
*/
package org.hibernate.search.test.integration.spring.injection;
import javax.inject.Inject;
import org.hibernate.search.test.integration.spring.injection.integration.SpringBeanResolverContributor;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.boot.SpringBootConfiguration;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.transaction.jta.JtaAutoConfiguration;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
/**
* @author Yoann Rodiere
*/
@Configuration
@SpringBootConfiguration
@EnableAutoConfiguration(exclude = JtaAutoConfiguration.class)
@ComponentScan
@EntityScan
public class SpringInjectionITApplicationConfiguration {
@Bean
public BeanPostProcessor addJpaBeanFactoryProperty() {
return new BeanPostProcessor() {
@Inject
private ApplicationContext applicationContext;
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
if ( bean instanceof LocalContainerEntityManagerFactoryBean ) {
LocalContainerEntityManagerFactoryBean factoryBean = (LocalContainerEntityManagerFactoryBean) bean;
factoryBean.getJpaPropertyMap()
.put( SpringBeanResolverContributor.BEAN_FACTORY, applicationContext );
}
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
return bean;
}
};
}
}