В этой статье в основном изучаются соответствующее содержание заказа на загрузку пружинных бобов, следующим образом.
Источник проблемы:
Существует боб, который является и бобом, который является B. Когда A создается экземпляром, вы хотите назначить имя свойства на метод FUNB на возвращаемое значение B.
Если это просто написано в:
private B b;
private String name = b.funb();
Ошибка будет сообщена, и NullPointexception заключается в том, что B не был установлен в настоящее время, так что оно ноль.
Решение заключается в следующем коде, и в то же время изучите порядок выполнения инициализации, метод построения объектов и инициатор и init-method весной.
открытый класс A реализует инициализируемое bean {private B B; Private String name; // = b.funb (); public void setb (b b) {System.out.println ("a.setb инициализирован"); this.b = b;} public a () {system.out.println ("a инициалированный");} public void init () {System.out.println ("init"); this.name = b.funb ();}@переопределить публичную строку toString () {return super.toString () + this.name;} public void efpropertiesset () бросает исключение {// фактически, также можно поместить его здесь // this.name = b.funb (); System.out.println ("efpropertiesset");}} открытый класс B {public String Funb () {System.out.println ("funb"); return "b.funb";} public b () {System.out.println ("b инициалировал");}}Файл конфигурации пружины
<бобы по умолчанию autwire = "byname"> <bean id = "a" init-method = "init"> </bean> <bean id = "b"> </bean> </beans>
Тестовый код:
public static void main (String [] args) {ApplicationContext context = new FileSystemXmlApplicationContext ("src/testspring/bean.xml"); a = (a) context.getbean ("a"); System.out.println (a);}Вывод программы:
Инициалирован
B Инициализировано
A.SetB Инициализирован
Afterpropertiesset
инициатор
фанк
[email protected]
Отсюда мы видим, что атрибут имени А успешно устанавливается на возвращаемое значение метода F Funb B при загрузке бобов. Ключевым моментом является использование init-method для его реализации.
Порядок загрузки также можно рассматривать как:
Сначала конструктор -> затем b Установите метод метода -> Метод инициализации Bean Afterpropertiesset -> Метод init -method
Следующий контент выдержается из книги, но я обнаружил, что даже если я вычеркнул его один раз, мое понимание его содержания будет более глубоким!
1. Процесс пружинного сборки бобов
1. Инстанция;
2. Установить значение атрибута;
3. Если реализован интерфейс Beannameaware, вызовите SetBeanName, чтобы установить идентификатор или имя боба;
4. Если вы реализуете интерфейс BeanFactoryAware, вызовите SetBeanFactory, чтобы установить BeanFactory;
5. Если внедрены ApplicationContextAwar
6. Вызовите метод предварительной инициализации Beanpostprocessor;
7. Позвоните в метод инициализации Beeping Afterpropertiesset ();
8. Вызовите настраиваемый метод init-method;
9. Позвоните в метод пост-инициализации Beanpostprocessor;
Процесс выключения пружинного контейнера
1. Позвоните в одноразовый подборщик Destroy ();
2. Вызовите настраиваемый метод Dressure-Method;
1. Одиночный боб
нагрузка
1. Инстанция;
2. Установить значение атрибута;
3. Если реализован интерфейс Beannameaware, вызовите SetBeanName, чтобы установить идентификатор или имя боба;
4. Если вы реализуете интерфейс BeanFactoryAware, вызовите SetBeanFactory, чтобы установить BeanFactory;
5. Если внедрены ApplicationContextAwar
6. Вызовите метод предварительной инициализации Beanpostprocessor;
7. Позвоните в метод инициализации Beeping Afterpropertiesset ();
8. Вызовите настраиваемый метод init-method;
9. Позвоните в метод пост-инициализации Beanpostprocessor;
Весенний контейнер закрывается
1. Позвоните в одноразовый подборщик Destroy ();
2. Вызовите настраиваемый метод Dressure-Method;
2. Порядок множества бобов
Расстановка приоритетов загрузки бобов BeanpostProcessor внедрение
В порядке определения бобов, порядок загрузки бобов (даже если есть перезапись идентификатор при загрузке нескольких пружинных файлов)
Когда «установить значение атрибута» (шаг 2), при встрече с REF, фасоль, соответствующий идентификатору ссылки, загружается сначала после «экземпляра» (шаг 1).
Подкласс AbstractFactoryBean будет вызывать метод CreateInstance после шага 6, а затем будет вызван метод GetObjectType.
Класс BeanFactoryUtils также изменит порядок загрузки бобов.
Выше приведено все содержание этой статьи о порядок внедрения весенних бобов, и я надеюсь, что это будет полезно для всех. Заинтересованные друзья могут продолжать ссылаться на другие связанные темы на этом сайте. Если есть какие -либо недостатки, пожалуйста, оставьте сообщение, чтобы указать это. Спасибо, друзья, за вашу поддержку на этом сайте!