Люди входят в реку и облака подобны ветру, а чувства подобны дождю и липкой земле.
Обзор
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