Люди входят в реку и облака подобны ветру, а чувства подобны дождю и липкой земле.
Обзор
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Постпроцессор:
- выполнить
BeanPostProcessorинтерфейс. - Реализуйте метод обратного вызова.
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:
- Воссоздать с помощью конструктора или фабричного метода
beanпример - Установить значения стоимости свойства и другие
beanцитаты - позвонить всем
*Awareопределяется в интерфейсеsetterметод - будет
beanэкземпляр передается каждомуbeanпостпроцессорpostProcessBeforeInitialization()метод - Вызов метода обратного вызова инициализации
- будет
Beanэкземпляр передается каждомуBeanпостпроцессорpostProcessAfterInitialization()метод - это
beanуже доступно - Когда контейнер закрывается, вызывается метод обратного вызова 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