Spring Series Six: Spring BeanPostProcessor

Spring
Spring Series Six: Spring BeanPostProcessor

Люди входят в реку и облака подобны ветру, а чувства подобны дождю и липкой земле.

Обзор

beanПостпроцессоры позволяют вносить пользовательские модификацииspring bean factoryновый созданныйbeanпример. если хотитеSpringКонтейнер завершает создание, настройку и инициализацию.beanПосле реализации некоторой пользовательской логики мы можем вставить один или несколькоBeanPostProcessorвыполнить.

Если есть несколькоBeanPostProcessorнапример, мы можем установитьorderсвойство или реализацияOrderedинтерфейс для управления порядком выполнения.

Spring BeanPostProcessor

BeanPostProcessorИнтерфейс состоит из двух методов обратного вызова, а именноpostprocessbeforeinitialize()иpostprocessafterinitialize().

за каждый созданный контейнерbeanЭкземпляры, все постпроцессоры получают обратные вызовы из контейнера перед вызовом метода инициализации контейнера и после любых обратных вызовов инициализации бина.

beanПостпроцессоры обычно проверяют интерфейс обратного вызова или оборачивают проксиbean. например некоторыеSpring AOPКлассы инфраструктуры (например,AbstractAdvisingBeanPostProcessor) ДостигнутоbeanПостпроцессор, обеспечивающий логику переноса прокси.

Как создатьBeanPostProcessor

springсоздатьbeanПостпроцессор:

  1. выполнитьBeanPostProcessorинтерфейс.
  2. Реализуйте метод обратного вызова.
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
 
public class CustomBeanPostProcessor implements BeanPostProcessor
{
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException
    {
        System.out.println("Called postProcessBeforeInitialization() for :" + beanName);
        return bean;
    }
     
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException
    {
        System.out.println("Called postProcessAfterInitialization() for :" + beanName);
        return bean;
    }
}

Как зарегистрироватьсяBeanPostProcessor

ApplicationContextРеализация автоматического обнаруженияBeanPostProcessorВсе определено в метаданных конфигурации интерфейсаbean. это будут этиbeanЗарегистрируйтесь как постпроцессор, чтобы его можно было создать позжеbeanпозвони им

потомSpringКаждый будет вызываться до и после вызова метода обратного вызова инициализации.beanЭкземпляр передается этим двум методам, и в этих двух методах вы можете обрабатывать его по своему усмотрению.beanпример.


<beans>
     <bean id="customBeanPostProcessor"
               class="com.howtodoinjava.demo.processors.CustomBeanPostProcessor" />
</beans>

BeanPostProcessorкогда вызывается метод

как правило,springизDIКонтейнер делает следующее, чтобы создатьbean:

  1. Воссоздать с помощью конструктора или фабричного методаbeanпример
  2. Установить значения стоимости свойства и другиеbeanцитаты
  3. позвонить всем*Awareопределяется в интерфейсеsetterметод
  4. будетbeanэкземпляр передается каждомуbeanпостпроцессорpostProcessBeforeInitialization()метод
  5. Вызов метода обратного вызова инициализации
  6. будетBeanэкземпляр передается каждомуBeanпостпроцессорpostProcessAfterInitialization()метод
  7. этоbeanуже доступно
  8. Когда контейнер закрывается, вызывается метод обратного вызова destroy

Spring BeanPostProcessorПример

Чтобы показать пример использования, я использовалEmployeeDAOImplкласс следующим образом:

public class EmployeeDAOImpl implements EmployeeDAO
{
    public EmployeeDTO createNewEmployee()
    {
        EmployeeDTO e = new EmployeeDTO();
        e.setId(1);
        e.setFirstName("Lokesh");
        e.setLastName("Gupta");
        return e;
    }
     
    public void initBean() {
        System.out.println("Init Bean for : EmployeeDAOImpl");
    }
     
    public void destroyBean() {
        System.out.println("Init Bean for : EmployeeDAOImpl");
    }
}

ДолженbeanКонфигурация его постпроцессора следующая:

<bean id="customBeanPostProcessor" class="com.howtodoinjava.demo.processors.CustomBeanPostProcessor" />
     
<bean id="dao" class="com.howtodoinjava.demo.dao.EmployeeDAOImpl"  init-method="initBean" destroy-method="destroyBean"/>

Теперь начнитеDIконтейнер и увидеть вывод:

ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");

вывод:

Called postProcessBeforeInitialization() for : dao
Init Bean for : EmployeeDAOImpl
Called postProcessAfterInitialization() for : dao

Очевидно, что метод BeanPostProcessor вызывается до и после метода инициализации.

Оригинальная ссылка:Spring BeanPostProcessor Example