Bean-инъекция серии Spring core

Spring Boot Java задняя часть Spring

Bean-инъекция серии Spring core

Привет всем, последние два сообщения в блоге поделились с вами созданием контейнера Spring и жизненным циклом Beans, Сегодня в этом будет рассказано о внедрении Beans, то есть некоторых методах внедрения и методах настройки Beans, а затем поговорим об авторе.На самом деле эта статья тоже относительно элементарная вещь.Ну старая рутина,структура статьи:

  1. Конфигурация на основе XML
  2. Конфигурация на основе аннотаций
  3. Конфигурация Spring на основе конфигурации
  4. Смешанное использование нескольких методов настройки

1. Конфигурация на основе XML

Только в этом разделе, если вдаваться в подробности, поста в блоге недостаточно, потому что точки знаний становятся все более и более сложными.Кроме того, большинство из них бесполезны в течение всей жизни.. Так что я некоторое время думал об этом, но я просто сосредоточусь непосредственно на ключевых моментах и ​​упомяну множество вещей, которые мне не нужно упоминать.

1.1 Формат DTD

XML-файл конфигурации Spring находится в формате DTD. Многие люди фактически игнорируют некоторые конфигурации в начале этого XML. Я упомяну об этом здесь:

Формат тега Beans:

  • Атрибут xmlns определяет пространство имен, а пространство имен — это префикс, с помощью которого все файлы определяют bean-компоненты, напримерaop:config, aop этой метки — это пространство имен aop, без пространства имен это пространство имен по умолчанию.

  • Атрибут xsi указывает файл формата xsd по его полному имени.

  • Формат атрибута xmlns:xmlns:namespace="Полное имя пространства имен (вы можете назвать его произвольно, вы можете назвать его 123)"

  • формат xsd: «пространство имен, определенное xmlns» + «пробел» + «файл xsd»

Расскажите о роли указания xsd: когда вы наберете первую половину

1.2 Определение бинов

Определить bean-компоненты в файле xml очень просто:

<bean id="stu" class="com.zdy.Student" >
    <property name="name"><value>张三</value></property>
</bean>

вводится в соответствии с методом setter. Не смотрите на внедрение свойств на основе конструкторов. Сиба, блогеры уже столько лет не делали такой операции. Все вводятся согласно сеттеру. Тогда скажем, в XML есть некоторые специальные символы, чтобы вместо них использовать escape-последовательности, позвольте мне привести таблицу:

Что касается интернета, то есть другой способ: , его все игнорируют. Одно неудобно, а другое в том, что пространство имен p не поддерживается. Мы поговорим о пространстве имен p позже.

Вышеприведенный пример представляет собой введенную константу, а затем упоминает взаимные зависимости между bean-компонентами:

<bean id="car" calss="..." />
<bean id="boss" class="..." >
    <property name="car">
        <ref bean="car"></ref>
    </property>
</bean>

Какой-то другой коллекторный впрыск, каскадный впрыск, не буду упоминать, он вообще бесполезен.

1.3 упрощенная конфигурация xml p пространство имен

Как видите, приведенная выше конфигурация очень сложная, и тег ref также используется при настройке взаимозависимости между bean-компонентами. Теперь поговорим об упрощенной настройке и автоматическом закачке. Пространство имен p предоставляется после Spring 2.5, цель состоит в том, чтобы упростить конфигурацию, см. Эффект:

//使用前
<bean id="stu" class="com.zdy.Student" >
    <property name="name"><value>张三</value></property>
</bean>
//使用后
<bran id="stu" class="..." p:name="张三" />

Затем произнесите следующий формат:

  • Для литеральных констант: p:property name=".."
  • Для свойств ссылочного компонента: p:property-name-ref="..."

Затем упомяните автоматическое внедрение: вы можете видеть, что если вы используете теги ref для внедрения зависимостей bean-компонента, программист умрет. Например, компонент на уровне контроллера может зависеть от более чем 10 компонентов на уровне сервиса. Настройте и напишите один за другим. Конечно нет. Так что автоматический впрыск выходит. @Autowired аннотация, о которой речь пойдет позже. Просто упомяните это здесь.

Затем укажите тег, который используется для импорта нескольких файлов конфигурации xml в один файл конфигурации xml.

2. Конфигурация на основе аннотаций

Как вы можете видеть выше, если вы хотите внедрить bean-компоненты в контейнер Spring, вы можете использовать теги, а затем внедрить некоторые свойства или что-то в этом роде. И эталонные отношения между bean-компонентами могут использовать тег ref. На самом деле, ни одна компания не примет этот вид операций на работе.потому что это слишком хлопотно, потому что он соответствует тегу ref, он действительно убьет людей.В работе для бинов, которые мы создали сами, мы обязательно будем использовать аннотации для их настройки., конкретный метод использования:

  1. Добавьте путь сканирования в xml-файл или в класс конфигурации Java. Вот конфигурация xml:
<context:component-scan base-package="...">
  1. Добавьте @Component, @Controller, @Service, @Dao в бины, которые мы написали сами
@Component
public class UerDao {
    ...
}

Таким образом, наш UserDao внедряется в контейнер Spring. Так как же этот подход к конфигурации разрешает взаимозависимости? @AutoWired

@Controller
public class UserController{
    @Autoired
    private UserService userService;
    ...
}

@Autoired автоматически введет бобы в соответствии с типом. Насколько это просто? Что касается некоторых других параметров, я не буду расширяться.

3. Конфигурация на основе конфигурации Spring

Дайте класс Config напрямую:

@Configuration
public class UserJedisConfig {

    @Bean
    public CacheManager cacheManager(final RedisTemplate redisTemplate) {
        return new RedisCacheManager(redisTemplate);
    }

    @Bean
    public RedisTemplate<String, Object> redisTemplate2(final RedisConnectionFactory factory) {
        final RedisTemplate<String, Object> template = new RedisTemplate<>();
        template.setConnectionFactory(factory);
        template.setKeySerializer(new StringRedisSerializer());
        template.setValueSerializer(new RedisObjectSerializer());
        template.afterPropertiesSet();
        return template;
    }
}

@Configuration содержит @Component внутри,Проще говоря, когда этот bean-компонент добавляется в контейнер Spring, bean-компоненты, возвращаемые методами, помеченными @Bean, будут помещены в контейнер Spring.Я не буду много говорить о конкретном синтаксисе. Существует три способа добавления классов @Configuration в контейнер Spring:Один из них — просмотреть в xml. Один из них — добавить аннотацию @Componentscan через другие классы конфигурации, функция та же самая, сканировать POJO по пути конфигурации, последний — напрямую указать класс конфигурации при создании контейнера вместо файла конфигурации xml, предыдущий упоминается в блоге.

4. Смешанное использование нескольких методов настройки

Ну, на самом деле есть три способа добавить бины в контейнер Spring. А также очень простой. Позвольте мне рассказать о небольшом опыте реальной работы:

  1. Аннотации больше, чем конфигурация xml. Каждый может почувствовать удобство аннотации.
  2. Все bean-компоненты, написанные вами, внедряются в контейнер с помощью аннотаций. Неважно, начинает ли контейнер использовать файл xml или класс Config. Просто добавьте автоматическое сканирование.
  3. При интеграции некоторых сторонних фреймворков (например, Jedis), когда вам нужно поместить сторонние компоненты в контейнер Spring, вы не можете использовать аннотации в это время, вы можете использовать конфигурацию файла xml или конфигурацию класса конфигурации.

Наконец, дайте сравнительную диаграмму и используйте диаграмму сцены:

Наконец, давайте поговорим о реальных вариантах выбора этих методов, с которыми столкнулся автор:

  1. Раньше я использовал "XML+Аннотацию" в риелторской компании, этот метод более распространен и более традиционен. Для веб-проектов с момента запуска контейнера создается файл xml, а затем в файле xml настраивается путь сканирования.Бин, написанный вами, помещается под путь и добавляется аннотация, аналогичная @Componenet.Зависимость зависит в аннотации @Autowired. Если вы ссылаетесь на некоторые сторонние фреймворки и хотите использовать bean-компоненты, поставляемые с некоторыми фреймворками, вы можете добавить теги конфигурации в xml в контейнер. Это более традиционный способ использования контейнера Spring.
  2. Spring boot, друзья, которые использовали или знали Spring boot, должны знать, что в Spring boot нет файла xml.Включение контейнера зависит от встроенного класса конфигурации, который будет автоматически сканировать и следовать по пути, поэтому мы разрабатываем класс будет добавлен в контейнер, если он аннотирован аналогично @Component.Bean-компоненты, которые полагаются на некоторые сторонние фреймворки.В общем, Spring boot будет иметь некоторые механизмы автоматического внедрения, которые автоматически создают bean-компоненты в соответствии с настроенными параметрами и автоматически внедряют bean-компоненты в контейнер.. Разработчики могут использовать @Autowired напрямую. В особых случаях вы сами напишете класс конфигурации для внедрения трехстороннего bean-компонента, с которым Spring boot не поставляется. Почему друзья, которые использовали Spring boot, думают, что Spring boot проще? Подумайте об этом, если вы хотите использовать Jedis, вам нужно только импортировать его с помощью pom. Затем введите соответствующий bean-компонент напрямую @Autowired без какой-либо настройки. Это также одна из основных функций Spring boot. Позже, когда у меня будет возможность рассказать о Spring boot, я поделюсь с вами тем, как реализован этот автоматический ввод.

Эпилог

Ну, на самом деле, этот раздел относительно прост, как видите, автор не говорил о конкретном способе использования, например, о некоторых атрибутах @Autowired, о каком-то синтаксисе @Configuration и т. д., автор упомянул об этом в одним ударом и привел пример. Поскольку автор считает, что основное внимание в этой статье должно быть уделено пониманию этих механизмов инъекции бобов, приведу несколько примеров:

  1. Разработчик видит, что bean-компонент, написанный в его собственном проекте, аннотирован @Component.Чтобы узнать, как добавляется bean-компонент (сканирование xml или сканирование файла конфигурации),
  2. После получения проекта было обнаружено, что в веб-проекте отсутствует основной XML-файл Spring. (В это время надо подумать, не контейнер ли это запущенный через класс Config)
  3. Разработчики хотят добавить в контейнер некоторые сторонние bean-компоненты, будь то использование конфигурации xml или конфигурации класса config. Ладно, я закончил делиться с вами этой статьей.Сегодня, в понедельник, все будут вкалывать, идти на работу, зарабатывать деньги и идти домой к Новому году.Over,Hava a good day .