Що у світі є яровими бобами?


397

Мені ще належить знайти високоякісне визначення весняних бобів, яке я можу зрозуміти. Я бачу, що на них часто посилаються в документації та книгах Грааля, але думаю, що розуміння того, що вони є, було б корисним. То що таке ярі боби? Як їх можна використовувати? Чи мають вони щось спільне з введенням залежності?


2
Грааль побудований на весну. Якщо ви не знайомі з Spring, пропоную вам хоча б прочитати якийсь матеріал про неї, щоб ви зрозуміли технології, якими ви користуєтесь.
Джефф Сторі

26
Я думаю, що коментарі тут страждають від тієї ж проблеми, яку бачить ОП у посиланнях на документи Граала та книги: вони легкі лише людям, які вже знають, що вони означають. Я вважаю, що стаття у Вікіпедії описує це набагато краще для початківця.
Еліас Дорнелес

12
@MarcoForberg Однією з причин того, що стародавня версія Spring є найкращим хітом у Google, тому що люди продовжують посилатися на неї з таких місць, як ТАК ... static.springsource.org/spring/docs/3.2.x/… було б краще місце для початку в ці дні.
Ян Робертс

5
+1 @IanRoberts Ось нинішня .
dmahapatro

Це не допомагає ввести IoC, сказавши, що IoC також відомий як DI. Вони пов'язані так, але IoC набагато ширший.
Алуан Хаддад

Відповіді:


212

Об'єкти, що утворюють основу вашої програми та якими керує контейнер Spring IoC *, називаються бобами. Квасоля - це об'єкт, який інстанціюється, збирається та іншим чином керується контейнером Spring IoC. Ці боби створюються з метаданими конфігурації, які ви постачаєте в контейнер, наприклад, у вигляді <bean/>визначень XML .

Більше, щоб дізнатися про боби та сферу застосування від SpringSource :

Коли ви створюєте визначення bean, то, що ви насправді створюєте, це рецепт створення фактичних екземплярів класу, визначеного цим визначенням bean. Ідея про те, що визначення квасолі - це рецепт, є важливою, оскільки це означає, що, подібно до класу, потенційно можна створити безліч об'єктних екземплярів, створених з одного рецепта.

Ви можете керувати не тільки різними залежностями та значеннями конфігурації, що підключаються до об'єкта, який створюється з певного визначення квасолі, але і сферою об'єктів, створених з конкретного визначення бобу. Цей підхід є дуже потужним і дає вам можливість вибирати область об'єктів, які ви створюєте за допомогою конфігурації, замість того, щоб «запускати» область об’єкта на рівні класу Java. Квасоля може бути визначена для розгортання в одному з ряду областей

* IoC: Інверсія управління


10
Отже, це об'єкти, якими керує контейнер, і я не повинен доторкатися, але якщо я хочу отримати доступ до біна, можливо, зателефонувати до деяких методів або отримати властивості, то я можу "попросити" Весна для квасолі?
grantmcconnaughey

22
@grantmc Це щось подібне, за винятком інверсії керуючої речі слід розуміти як протилежну "запиту": замість "запитання" про речі, ви "заявляєте", що вам це потрібно. І тоді, коли ви запускаєте додаток, фреймворк перевірятиме всі декларації та встановлює відповідний екземпляр.
Еліас Дорнелес

6
@elias Як я заявляю, що мені це потрібно? Це коли я використовую @Autowired? Або просто коли я роблю свої import?
Михайло Батцер

16
Було б корисно визначити, що означає IoC для весняних новачків.
Лукас

4
@lucas погодився. IoC - це "інверсія управління". Дивіться чудові запитання та запитання: Що таке впорскування та інверсія управління у весняних рамках? і що таке інверсія управління? .
mhradek

135

Весняні боби - це лише об’єкти, якими керує контейнер Spring, а саме вони створюються та з'єднуються в рамках і поміщаються в "мішок предметів" (контейнер), звідки ви можете їх отримати пізніше.

Частина "проводки" полягає в тому, про що робиться ін'єкція залежності, що це означає, що ви можете просто сказати "мені знадобиться ця річ", і рамки дотримуватимуться деяких правил, щоб зробити вас належним екземпляром.

Для тих, хто не звик до Spring, я думаю, що в статті Wikipedia Spring є чудовий опис :

Центральним для Spring Framework є його інверсія контейнера управління, який забезпечує послідовний спосіб налаштування та управління об'єктами Java за допомогою відображення. Контейнер відповідає за управління життєвими циклами об'єктів конкретних об'єктів: створення цих об'єктів, виклик методів їх ініціалізації та налаштування цих об'єктів шляхом їх з'єднання.

Об'єкти, створені контейнером, також називаються керованими об'єктами або квасолею . Контейнер можна налаштувати завантаженням XML-файлів або виявленням конкретних анотацій Java на класах конфігурації. Ці джерела даних містять визначення квасолі, які надають інформацію, необхідну для створення бобів.

Об'єкти можна отримати за допомогою пошуку залежностей або введення залежності . Пошук залежностей - це шаблон, коли абонент запитує об'єкт контейнера для об'єкта з конкретним іменем або певного типу. Введення залежності - це схема, коли контейнер передає об'єкти за назвою іншим об'єктам через конструктори, властивості або заводські методи.


Екземпляр - це просто інше слово для об’єктів. Якщо ви використовуєте "екземпляри об'єктів", ви не говорите об'єктні об'єкти?
Полум’я удуна

Цікаве запитання. Згідно Вікіпедії, замість цього я повинен сказати "об'єкти екземпляра": en.wikipedia.org/wiki/Instance_(computer_science)
Еліас Дорнелес

2
Кроляча нора йде глибше.
Полум’я удуна

Сьогодні я зрозумів, що "об'єкти об'єктів" (і, отже, об'єкти об'єктів) насправді мають сенс для мене, тому що я звик до мов, де клас також є об'єктом (тому у вас є об'єкти класу, і, ну, "об'єкти" об'єкти ). У будь-якому разі я оновив опис, щоб використовувати "об'єкти екземпляра" відповідно до статті Вікіпедії. ^^
Ілля Дорнелес

1
@Ruizhi звичайний об'єкт, тобто екземпляр класу - ця дискусія була бічною стороною про використання правильного виразу для позначення об'єкта. :)
Еліас Дорнелес

50

Спочатку розберемося з весною:

Весна - це легка і гнучка рамка.

Аналогія:
введіть тут опис зображення

Бін: це об'єкт, який створюється, управляється та знищується у весняному контейнері. Ми можемо ввести об'єкт у Spring Container через метадані (xml або анотація), які називаються інверсією управління.

Аналогія: Припустимо, що фермер займається вирощуванням сільськогосподарських угідь насінням (або квасолею). Тут, «Фермер» - «Весняний каркас», «Земля сільськогосподарського призначення» - «Весняний контейнер», «Квасоля» - «Весняні боби», «Культивація» - «Весняні переробники».

введіть тут опис зображення

Як і життєвий цикл бобів, і ясна квасоля теж має власний життєвий цикл.

введіть тут опис зображення

введіть тут опис зображення

img джерело

Далі йде послідовність життєвого циклу бобів навесні:

  • Instanttiate: Спочатку весняний контейнер знаходить визначення bean з файлу XML та інстанціює bean.

  • Властивості населення: Використовуючи введення залежності, spring заповнює всі властивості, як зазначено у визначенні боба.

  • Встановити ім'я біна: Якщо bean реалізує BeanNameAwareінтерфейс, spring передає id setBeanName()методу bean до методу.

  • Встановити фабрику Bean: Якщо Bean реалізує BeanFactoryAwareінтерфейс, пружина передає setBeanFactory()метод методу.

  • Попередня ініціалізація: також називається пост-процес квасолі. Якщо є будь-які бобові BeanPostProcessors, пов'язані з квасолею, postProcesserBeforeInitialization()метод Spring poziva .

  • Ініціалізація квасолі: якщо боб реалізується IntializingBean, afterPropertySet()називається його метод. Якщо bean має декларування методу init, викликається зазначений метод ініціалізації.

  • Постініціалізація: - Якщо є якісь BeanPostProcessorsасоційовані з бобом, їх postProcessAfterInitialization()методи будуть викликані.

  • Готовий до використання: тепер квасоля готова до використання додатком

  • Знищити: якщо боб реалізується DisposableBean, він викличе destroy()метод


23

Добре, ви це частково зрозуміли. Ви повинні адаптувати боби відповідно до ваших потреб та повідомити весняний контейнер, щоб керувати ним, коли потрібно, використовуючи методологію, широко відому як IoC ( інверсія контролю ), придуману Мартіном Фаулером , також відому як ін'єкція залежностей (DI).

Ви обв'язуєте квасоля таким чином, щоб вам не довелося піклуватися про інстанцію або оцінювати будь-яку залежність від квасолі. Це в народі відомий як Голівудський принцип .

Google - найкращий інструмент, щоб дізнатися більше про це, окрім посилань, з якими ви б переповнені тут у цьому питанні. :)


2
Не можна не відзначити, що IoC - це концепція, а DI - це одна з методик, яка може бути використана для досягнення IoC, вони не є замінними визначеннями.
kekko12

9

Навесні є контейнер IoC, в якому є сумка з квасолею; підтримка створення та видалення - це обов'язки Spring Container. Ми можемо поставити квасоля до весни за допомогою електропроводки та автоматичної проводки. Підключення означає, що ми вручну конфігуруємо його у XML-файл, а "Автоматичне підключення" означає, що ми поміщаємо анотації у файл Java, а потім Spring автоматично сканує кореневий контекст, де файл конфігурації java, робимо його та поміщаємо в мішок Spring.

Ось детальний URI, де ви отримали більше інформації про Beans


8

Весняні боби - це заняття. Замість того, щоб призначати клас (використовуючи new), ви отримуєте екземпляр у ролі beanтипу вашого класу з контексту програми, де bean - це те, що ви налаштували в конфігурації програми програми. Таким чином, вся програма підтримує односторонній екземпляр у всій програмі. Усі квасолі ініціалізуються відповідно до порядку їх конфігурації відразу після ініціалізації контексту програми. Навіть якщо у вашій програмі немає бобів, всі екземпляри бобів вже створюються в момент, коли ви створили контекст програми.


1
Боби - це не класи, а об'єкти як екземпляри класів, якими керує реалізація контейнера.
Чататата

7
  • Весняні боби - це лише об'єктні екземпляри, якими керує контейнер Spring IOC Spring.

  • Spring IOC-контейнер несе сумку Bean.Bean, створення, обслуговування та видалення - обов'язки Spring Container.

  • Ми можемо поставити квасоля до весни за допомогою електропроводки та автоматичної проводки.

  • Підключення означає, що ми вручну налаштовуємо його у файл XML.

  • Автоматичне підключення означає, що ми поміщаємо анотації у файл Java, а потім Spring автоматично сканує кореневий контекст, де файл конфігурації java, робимо його та поміщаємо в мішок Spring.


7

Bean - це POJO (Plain Old Java Object), яким керує весняний контейнер.

Весняні контейнери створюють лише один екземпляр квасолі за замовчуванням. Цей боб він зберігається в пам'яті, тому всі запити для файлу повертаються спільним посиланням на той самий.

Анотація @Bean повертає об'єкт, який весна реєструється як боб у контексті програми. Логіка всередині методу відповідає за створення екземпляра.

Коли ми використовуємо анотацію @Bean?

Коли автоматична конфігурація не є можливою. Наприклад, коли ми хочемо з'єднати компоненти з третьої сторони бібліотеки, оскільки вихідний код недоступний, тому ми не можемо коментувати класи за допомогою @Component.

Сценарій реального часу може бути таким, що хтось хоче підключитися до відра Amazon S3. Оскільки джерело недоступне, йому доведеться створити @bean.

@Bean
public AmazonS3 awsS3Client() {
    BasicAWSCredentials awsCreds = new BasicAWSCredentials(awsKeyId, accessKey);
    return AmazonS3ClientBuilder.standard().withRegion(Regions.fromName(region))
            .withCredentials(new AWSStaticCredentialsProvider(awsCreds)).build();
}

Джерело для коду вище -> https://www.devglan.com/spring-mvc/aws-s3-java

Тому що я згадував @Acomponent Annotation вище.

@Component Вказує, що анотований клас - це "компонент". Такі класи розглядаються як кандидати для автоматичного виявлення при використанні конфігурації на основі анотацій та сканування контуру класу.

Анотація компонентів реєструє клас як єдиний квасоля.


2

Навесні ті об'єкти, які складають основу вашої програми та якими керує контейнер Spring IoC, називають квасолею. Квасоля - це просто об'єкт, який інстанціюється, збирається та іншим чином керується контейнером Spring IoC;


1

На весну всі об’єкти - квасоля! Основним кроком Весняної рамки є визначення ваших об'єктів як бобів. Квасоля - це не що інше, як об’єктні екземпляри, які створювали б весняні рамки, переглядаючи їх класифікаційні визначення. Ці визначення в основному утворюють метадані конфігурації. Потім на основі цих метаданих конфігурації створюється план, для якого необхідно об'єкти, які необхідно встановити, які залежності потрібно встановити та ввести, сферу застосування новоствореного екземпляра тощо.

Метадані можна надати у простому XML-файлі, як у першому розділі. Крім того, можна надати метадані як Анотація або Конфігурація Java.

Книга: Просто весна


1

Конфігурація XML Spring складається з Beans, а Beans - це в основному класи. Вони просто POJO, які ми використовуємо всередині нашого ApplicationContext. Визначення квасолі можна вважати заміною ключового слова новим. Тож де б ви не використовували ключове слово new у вашій програмі, щось таке:

MyRepository myRepository =new MyRepository ();

Там, де ви використовуєте це ключове слово нове , десь ви можете подивитися, як вилучити цю конфігурацію та помістити її у XML-файл. Тож ми будемо кодувати так:

<bean name="myRepository " 
      class="com.demo.repository.MyRepository " />

Тепер ми можемо просто використовувати інжекцію / інжекцію конструктора. Я використовую ін'єкцію Setter.

public class MyServiceImpl implements MyService {
    private MyRepository myRepository;
    public void setMyRepository(MyRepository myRepository)
        {
    this.myRepository = myRepository ;
        }
public List<Customer> findAll() {
        return myRepository.findAll();
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.