Именование бинов в Spring IoC.

 

В этой статье мы рассмотрим тему именования бинов в Java Spring Framework. В Spring трех уровневая система именования бинов.

 

  1. id атрибут
  2. name атрибут
  3. class атрибут

 

Предпочтительнее использовать id атрибут всегда когда это возможно.

 

Как происходит поиск бина по имени?

 

 

Сначала спринг ищет по id бинов, если ни один из бинов не имеет заданный id, то спринг ищет в бинах в атрибуте name, если он там тоже не находит соответствий, то он начинает искать по имени класса в атрибуте class. Если он и там не находит, то выбрасывается исключение. Так же если он находит несколько бинов с одинаковым class в конфигурации, он выкидывает исключение.

 

 

Давайте обозначим бин по id.

 

<bean id=”mainStringBean” class=”java.lang.String” />

 

мы обозначили бин по идентификатору (id), если мы теперь попробуем поискать этот бин через контекст

 

ApplicationContext appContext = new GenerixXmlApplicationContext(
   new ClassPathResource(“spring-context.xml”));


String mainStringBean = appContext.getBean(“mainStringBean”, String.class);

 

Мы получим наш бин mainStringBean. Это будет пустая строка. Давайте теперь добавим эли-асов нашему бину. Пишем следующее.

 

<bean id=”mainStringBean” name=”mainSuperBean, mainAliasBean” class=”java.lang.String” />

 

ApplicationContext appContext = new GenerixXmlApplicationContext(
   new ClassPathResource(“spring-context.xml”));


String mainStringBean1 = appContext.getBean(“mainStringBean”, String.class);
String mainStringBean2 = appContext.getBean(“mainSuperBean”, String.class);
String mainStringBean3 = appContext.getBean(“mainAliasBean”, String.class);


System.out.println(mainStringBean1 == mainStringBean2);
System.out.println(mainStringBean2 == mainStringBean3);

 

Результат

 

true
true

 

Понятно, да? Мы имеем эли-асы для одного и того же бина, эли-асы в атрибуте name можно разделять пробелом, запятыми и точкой с запятой “;”.

 

Если убрать теперь поля name, id и оставить только class, и запросить бин по имени класса java.lang.String. То мы получим тот же самый бин.

 

Вот так работает поиск бинов по имени в Spring IoC. На этом все.

Пожаловаться Подписаться
0 ответов
авторизуйтесь чтобы ответить