0

Я новичок в Spring framework. В то время как чтение зависимостей инъекции я узнал два способа для добавления beons anotationbased и xml.Какие классы загружены как фасоль весной?

В xmlBased довольно просто определить один компонент внутри вашего xml-файла контекста приложения.

например.

<bean id="wild" class="com.javapapers.spring.ioc.Wolf" /> 
<bean id="zoo" class="com.javapapers.spring.ioc.Zoo"> 
    <property name="wild" ref="wild" /> 
</bean> 

, но в конфигурации на основе аннотаций, мы просто должны написать

<context:component-scan base-package="com.javapapers.spring.ioc" /> 

Я хочу знать, как она будет загружать «дикий» и «зоопарк».

Означает ли это, что он загрузит все бобы или только конкретные, которые написаны в аннотации @Service .. ???

Я также хочу знать, как он загружен .. ??? все бобы инициализируются при загрузке приложения .. ??

Спасибо ... !!

+2

Прочитайте официальную документацию [здесь] (http://static.springsource.org/spring/docs/3.2.x/spring-framework-reference/html/beans.html#beans-factory-class). У него есть все ответы. –

ответ

1

Бобы инициализируются через ApplicationContext, что также является BeanFactory. С конфигурацией XML вам понадобится реализация этого интерфейса, ClassPathXmlApplicationContext. Вашему приложению необходимо создать такой класс, зарегистрировать XML-файл (ы) и обновить контекст. Когда это будет сделано, Spring начнет создавать ваши компоненты, прочитав конфигурацию.

Когда он попадает в элемент <component-scan>, Spring сканирует ваши объявленные пакеты для любых классов, аннотированных с помощью @Component или его специализаций. Из docs:

В Spring 2.0 и более поздних @Repository аннотаций является маркером любого класса, который выполняет роль или стереотип (также известный как данные Object Access или DAO) из хранилища. Среди применений этого маркера - автоматический перевод исключений.

Spring 2.5 вводит дополнительные аннотации к стереотипам: @Component, @Service и @[email protected] - это общий стереотип для любого компонента Spring. @Repository, @Service и @Controller - это специализации @Component для более конкретных случаев использования, например, для уровней настойчивости, обслуживания и представления, соответственно.

Таким образом, вы можете аннотировать компонент классов с @Component, но аннотирования их @Repository, @Service или @Controller вместо этого, ваши классы более правильно подходят для обработки с помощью инструментов или ассоциирующихся с различными аспектами. Например, эти аннотации для стереотипов обеспечивают идеальные цели для pointcut.

Таким образом, если вы используете между @Component или @Service для ваш сервисный уровень, @Service, безусловно, лучший выбор. Аналогично, , как указано выше, @Repository уже поддерживается в качестве маркера для автоматического перевода исключений в вашем уровне персистентности .

Когда он найдет эти классы, он создаст экземпляр каждого из них.

Что касается этого, это немного сложнее. Общая стратегия - с отражением. Однако из-за вашей конфигурации Spring иногда генерирует (java или cglib) прокси вместо явных экземпляров, чтобы он мог добавлять поведение.

Все этапы подробно описаны в документе official documentation.

3

При использовании <context:component-scan base-package="com.javapapers.spring.ioc" />, весна всех классов создания экземпляра, которые находятся в пакете "com.javapapers.spring.ioc" и есть один из этой аннотации:

  • @Service
  • @Controller
  • @Repository
  • ...

И да, все бобы инициализируется при запуске приложения.

Вы можете получить больше информации на этой странице: here

+0

короткий и приятный информация ... !!!! – JOHND

0

Будут загружены все бобы аннотированные с

@Controller 
@Component 
@Service 
@Repository 

которые внутри com.javapapers.spring.ioc ​​пакетов, и его подпакетов.

Смежные вопросы