Bean-инъекция серии Spring core
Привет всем, последние два сообщения в блоге поделились с вами созданием контейнера Spring и жизненным циклом Beans, Сегодня в этом будет рассказано о внедрении Beans, то есть некоторых методах внедрения и методах настройки Beans, а затем поговорим об авторе.На самом деле эта статья тоже относительно элементарная вещь.Ну старая рутина,структура статьи:
- Конфигурация на основе XML
- Конфигурация на основе аннотаций
- Конфигурация Spring на основе конфигурации
- Смешанное использование нескольких методов настройки
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: когда вы наберете первую половину Определить bean-компоненты в файле xml очень просто: вводится в соответствии с методом setter. Не смотрите на внедрение свойств на основе конструкторов. Сиба, блогеры уже столько лет не делали такой операции. Все вводятся согласно сеттеру.
Тогда скажем, в XML есть некоторые специальные символы, чтобы вместо них использовать escape-последовательности, позвольте мне привести таблицу: Что касается интернета, то есть другой способ: , его все игнорируют. Одно неудобно, а другое в том, что пространство имен p не поддерживается. Мы поговорим о пространстве имен p позже. Вышеприведенный пример представляет собой введенную константу, а затем упоминает взаимные зависимости между bean-компонентами: Какой-то другой коллекторный впрыск, каскадный впрыск, не буду упоминать, он вообще бесполезен. Как видите, приведенная выше конфигурация очень сложная, и тег ref также используется при настройке взаимозависимости между bean-компонентами. Теперь поговорим об упрощенной настройке и автоматическом закачке.
Пространство имен p предоставляется после Spring 2.5, цель состоит в том, чтобы упростить конфигурацию, см. Эффект: Затем произнесите следующий формат: Затем упомяните автоматическое внедрение: вы можете видеть, что если вы используете теги ref для внедрения зависимостей bean-компонента, программист умрет. Например, компонент на уровне контроллера может зависеть от более чем 10 компонентов на уровне сервиса. Настройте и напишите один за другим. Конечно нет. Так что автоматический впрыск выходит. @Autowired аннотация, о которой речь пойдет позже. Просто упомяните это здесь. Затем укажите тег, который используется для импорта нескольких файлов конфигурации xml в один файл конфигурации xml. Как вы можете видеть выше, если вы хотите внедрить bean-компоненты в контейнер Spring, вы можете использовать теги, а затем внедрить некоторые свойства или что-то в этом роде. И эталонные отношения между bean-компонентами могут использовать тег ref. На самом деле, ни одна компания не примет этот вид операций на работе.потому что это слишком хлопотно, потому что он соответствует тегу ref, он действительно убьет людей.В работе для бинов, которые мы создали сами, мы обязательно будем использовать аннотации для их настройки., конкретный метод использования: Таким образом, наш UserDao внедряется в контейнер Spring. Так как же этот подход к конфигурации разрешает взаимозависимости? @AutoWired @Autoired автоматически введет бобы в соответствии с типом. Насколько это просто? Что касается некоторых других параметров, я не буду расширяться. Дайте класс Config напрямую: @Configuration содержит @Component внутри,Проще говоря, когда этот bean-компонент добавляется в контейнер Spring, bean-компоненты, возвращаемые методами, помеченными @Bean, будут помещены в контейнер Spring.Я не буду много говорить о конкретном синтаксисе.
Существует три способа добавления классов @Configuration в контейнер Spring:Один из них — просмотреть Ну, на самом деле есть три способа добавить бины в контейнер Spring. А также очень простой. Позвольте мне рассказать о небольшом опыте реальной работы: Наконец, дайте сравнительную диаграмму и используйте диаграмму сцены: Наконец, давайте поговорим о реальных вариантах выбора этих методов, с которыми столкнулся автор: Ну, на самом деле, этот раздел относительно прост, как видите, автор не говорил о конкретном способе использования, например, о некоторых атрибутах @Autowired, о каком-то синтаксисе @Configuration и т. д., автор упомянул об этом в одним ударом и привел пример. Поскольку автор считает, что основное внимание в этой статье должно быть уделено пониманию этих механизмов инъекции бобов, приведу несколько примеров:1.2 Определение бинов
<bean id="stu" class="com.zdy.Student" >
<property name="name"><value>张三</value></property>
</bean>
<bean id="car" calss="..." />
<bean id="boss" class="..." >
<property name="car">
<ref bean="car"></ref>
</property>
</bean>
1.3 упрощенная конфигурация xml p пространство имен
//使用前
<bean id="stu" class="com.zdy.Student" >
<property name="name"><value>张三</value></property>
</bean>
//使用后
<bran id="stu" class="..." p:name="张三" />
2. Конфигурация на основе аннотаций
<context:component-scan base-package="...">
@Component
public class UerDao {
...
}
@Controller
public class UserController{
@Autoired
private UserService userService;
...
}
3. Конфигурация на основе конфигурации Spring
@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;
}
}
4. Смешанное использование нескольких методов настройки
Эпилог