Как работать с ConfigurableListableBeanFactoty (не могу зарегистрировать BeanPostProcessor)?

Ссылка скопирована
30 января 2026 1 ответ

Добрый день.
Создаю свой BeanPostProcessor и хочу его добавить явно (не с помощью bean).

Делаю в Spring MVC так:

public class BuhApp implements WebApplicationInitializer { 	@Override 	public void onStartup(ServletContext servletContext) 	{ 		AnnotationConfigWebApplicationContext context = 				new AnnotationConfigWebApplicationContext();				 		context.register(BuhAppConfig.class);		 		context.getBeanFactory().addBeanPostProcessor(new MyBeanPostProcessor()); 		 		DispatcherServlet servlet = new DispatcherServlet(context); 		ServletRegistration.Dynamic registration = servletContext.addServlet("app", servlet); 		registration.setLoadOnStartup(1); 		registration.addMapping("/*");			 				 	} }

public class BuhApp implements WebApplicationInitializer { @Override public void onStartup(ServletContext servletContext) { AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.register(BuhAppConfig.class); context.getBeanFactory().addBeanPostProcessor(new MyBeanPostProcessor()); DispatcherServlet servlet = new DispatcherServlet(context); ServletRegistration.Dynamic registration = servletContext.addServlet("app", servlet); registration.setLoadOnStartup(1); registration.addMapping("/*"); } }

Но в результате выдает ошибку:
Caused by: java.lang.IllegalStateException: BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext

Посмотрел в интернете. Там делают так же, но не в Spring MVC, и там работает. А в Spring MVC нет.
P.S. Не нужно советовать зарегистрировать как бин. Это я знаю. Интересует как сделать с помощью ConfigurableBeanFactory.

Дополнительно:

Нужно решить такую задачу?

Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

Заказать помощь
Лучший ответ
1
Стас DB Ответ

Для работы с ConfigurableListableBeanFactory и регистрации BeanPostProcessor в Spring Framework есть несколько шагов, которые необходимо выполнить.

1. Создайте класс, который реализует интерфейс BeanPostProcessor. Например:

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
 
public class CustomBeanPostProcessor implements BeanPostProcessor {
    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }
 
    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
        return bean;
    }
}

import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; public class CustomBeanPostProcessor implements BeanPostProcessor { @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { return bean; } @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { return bean; } }

2. Зарегистрируйте этот класс в вашем конфигурационном файле Spring. Например, в файле applicationContext.xml:

 

3. Укажите ConfigurableListableBeanFactory как зависимость в вашем классе. Например:

import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
 
public class CustomClass {
    private ConfigurableListableBeanFactory beanFactory;
 
    public CustomClass(ConfigurableListableBeanFactory beanFactory) {
        this.beanFactory = beanFactory;
    }
 
    // Другие методы вашего класса
}

import org.springframework.beans.factory.config.ConfigurableListableBeanFactory; public class CustomClass { private ConfigurableListableBeanFactory beanFactory; public CustomClass(ConfigurableListableBeanFactory beanFactory) { this.beanFactory = beanFactory; } // Другие методы вашего класса }

4. В методе, где вы создаете экземпляр CustomClass, передайте ему ConfigurableListableBeanFactory. Например:

ConfigurableListableBeanFactory beanFactory = // Получите beanFactory из контекста приложения
CustomClass customClass = new CustomClass(beanFactory);

ConfigurableListableBeanFactory beanFactory = // Получите beanFactory из контекста приложения CustomClass customClass = new CustomClass(beanFactory);

После выполнения этих шагов вы сможете успешно работать с ConfigurableListableBeanFactory и зарегистрировать BeanPostProcessor в вашем приложении на основе Spring Framework. Если у вас возникнут дополнительные вопросы, не стесняйтесь задавать их.

Другие ответы (0)

Пока нет других ответов. Будьте первым, кто поможет автору.

Ответить на вопрос

комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Вам также может быть интересно