Весна предоставляет для разработчиков много постпроцессоров, таких как Beanpostprocessor, Beanfactorypostprocessor, BeanvalidationPostProcessor и другие постпроцессоры. Большинство их методов использования похожи. Поймите одну из них и овладеть их методами использования, а другие могут быть поняты по аналогии.
Здесь мы используем BeanpostProcessor в качестве примера, чтобы показать, как он используется.
Интерфейс BeanpostProcessor предоставляет разработчикам два метода для разработки: постпроцесс -реферизация и постпроцессафтеринициализация.
PostProcessBefeInitialization: этот метод в основном для Spring для настройки процесса перед вызовом метода инициализации при инициализировании фасоля.
Постпроцессафтеринициализация: этот метод предназначен в основном для Spring, чтобы настроить процесс после вызова метода инициализации при инициализации бобов.
Пример кода:
/** * Test Bean */public Class Cat {Private String name; частный int возраст; public void say () {System.out.println ("name:" + name); System.out.println («Возраст:» + возраст); } public String getName () {return name; } public void setName (string name) {this.name = name; } public int getage () {return Age; } public void setage (int age) {this.age = age; }} /*** Пользовательский постпроцессор*/public class catbeanpostprocessor реализует Beanpostprocessor {@nullable @override proploceprocessbebessbebeinialization (объект Bean, String Beanname) Throws Beansexception {if (экземпляр Bean Cat) {// Вывод оригинальный атрибут cat = (cat) bean; Cat.say (); вернуть бон; } return Bean; } @Nullable @Override public Object postprocessafterinitialialialialization (Object Bean, String Beanname) Throws Beansexception {if (экземпляр Bean cat) {// изменять значение атрибута и возвращать кот = (cat) bean; Cat.SetName ("Привет, маоми"); Cat.Setage (3); вернуть кошку; } return Bean; }} /** * run */public class run {public static void main (string [] args) {ApplicationContext ApplicationContext = new ClassPathxMlapplicationContext ("Spring-bean.xml"); Cat Cat = (Cat) ApplicationContext.getBean ("cat"); Cat.say (); }}Информация о конфигурации XML
<!-Настройте Bean и инициализируйте-> <bean id = "cat"> <name = "name" value = "hellokitty" /> <name = "age" value = "1" /> < /bean> <bean id = "catbeanpostprocessor" />
Результат вывода:
Имя: Hellokitty
Возраст: 1
Имя: Привет, Маоми
Возраст: 3
Вы можете видеть, что информация о бобах, обработанную через постпроцессор, изменилась. Наконец, давайте посмотрим, как вызвать пользовательские реализации в исходном коде.
В методе инициализации фасоль: Abstractautowirecapablebeanfactory.java
/** * Инициализация Bean */Защищенный объект инициализируется (окончательная строка Beanname, Final Object Bean, @nullable rootbeandefinition mbd) {// Опустить часть нерелевантного объекта кода wrappedbean = bean; // перед инициализацией if (mbd == null ||! Mbd.issynthetic ()) {wrappedbean = ApplybeanpostProcessorsbefeinialization (обернутый, Beanname); } try {// вызов метода инициализации для инициализации Bean InvokeInitMethods (Beanname, TravedBean, MBD); } catch (Throwable ex) {Throw New BeancreationException ((MBD! = NULL? MBD.GetResourceDescription (): NULL), Beanname, «Вызов метода init не удался», Ex); } // if (mbd == null ||! Mbd.issynthetic ()) {wrantbean = Applybeanpostprocessorsafterinitialization (wrappedbean, beanname); } return Tradbean -Bean; } // Postprocessbebeforeinialization Метод вызовов @override public object Applybeanpostprocessorsbeforeinialization (Object Sauestingbean, String Beanname) Throws Beansexception {Object result = существует для (Beanpostprocessor Beanprocessor: getbeanpostprocessors ()) {// Вызов пользовательской постопроцессесбессовой метод метода Объекта Coverse = beanprocessor.postprocessbeforeinialization (результат, Beanname); if (current == null) {return result; } result = current; } return Result; } // Постпроцессафтеринициализация метода вызовы @override public object ApplyBeanpostProcessorSafterinitialization (объект существующий бухгалтер, строка Beanname) Throws Beansexception {Object Result = существует Для (Beanpostprocessor Beanprocessor: getbeanpostprocessors ()) {// Пользовательский метод постопроцессафтеринициализации вызывает объект ток = beanprocessor.postprocessafterinitialization (результат, Beanname); if (current == null) {return result; } result = current; } return Result; }Вышеуказанное - это процесс вызова пружины для реализации пользовательских методов. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать wulin.com больше.