Как да имате конфигурационен клас, инжектирайте нещо, което вече е създадено от spring-boot и го променете

Опитвам се да разширя activiti-spring-boot до интегрирайте го с пружинна сигурност.

Това е първият ми път с пружина и пружинен ботуш. Получавам много страхотни резултати, изследвайки как да напиша код, за да направя това. Интересува ме този отговор.

https://github.com/jbarrez/spring-boot-with-activiti-example/issues/5

Което публикувах собствения си въпрос в края на този брой на github.

Това, което искам да попитам тук, е това концептуално какво означава това

„Обичайният Spring начин: имайте клас @Configuration и инжектирайте ProcessEngine или ProcessEngineConfiguration bean, който е създаден от Spring Boot.“

Това означава ли, че Spring Boot вече е конфигурирал ProcessEngine или ProcessEngineConfiguration bean и по някакъв начин мога да ги инжектирам и да продължа да ги конфигурирам, без да губя това, което вече е конфигурирано от Spring Boot?

Така ли работи инжектирането на зависимости? Това е концептуален въпрос, защото мислех, че инжектирането на зависимости е просто начин за замяна на интерфейса с внедряване на този интерфейс. И моето разбиране е, че ако, например, заменя ProcessEngineConfiguration bean, ще загубя цялата конфигурация, направена от Spring-Boot, и ще трябва да ги преконфигурирам отново.

Имайте предвид, че моето разбиране за всичко Spring най-вероятно е грешно!

TIA

*За пояснение: activiti-spring-boot е проект за стартиране, който интегрира activiti и spring с помощта на spring boot. Използва основно удостоверяване. Искам да използвам удостоверяване на основата на токени, така че всъщност се опитвам да интегрирам activit-spring-boot с spring сигурност, използвайки друг материал за spring-boot, наречен spring-boot-starter-security.


person Haris Hashim    schedule 01.01.2016    source източник
comment
Вие разбирате погрешно значението на инжектирането на зависимост. Инжектирането на зависимости означава, че имате това, от което се нуждаете, за да накарате вашия клас да работи. Тази концепция обикновено се отнася до IoC (Control Inversion), което трябва да има рамка, управляваща вашата контролна структура и инжектиране на зависимостите. Това се прави от стандартен core Spring. Spring boot е модерен инструмент, който се възползва от предимствата на Spring, за да има заредена някаква конфигурация по подразбиране (вие казвате на boot какво ви трябва и давате някои конфигурируеми стойности и boot създава някои готови за инжектиране bean компоненти за вас).   -  person Xtreme Biker    schedule 02.01.2016
comment
Да кажем обаче, че разширя/наследя клас и го инжектирам с помощта на анотацията @Bean, за да заменя родителския/наследен клас. Това няма ли да означава, че моят персонализиран клас и неговият код ще бъдат използвани вместо родителския клас. Как това може да продължи със същата конфигурация, направена от Spring Boot, все още е голям въпрос, който проучвам сега и ще публикувам тук, когато получа работещо решение. Благодарности и Поздрави!   -  person Haris Hashim    schedule 03.01.2016
comment
Наистина не разбирам как този @ Bean може да се използва за инжектиране на клас, който разширява друг клас. Но кодът, който пиша сега, използва @ Configuration и вътре в него мога да използвам @Bean, за да създам функция, която връща друг клас. Това много ме обърква, тъй като мислех, че бобът е POJO. Но в настоящия ми код той се използва за анотиране на функция, която връща клас. Другото объркващо нещо е, че когато имам няколко функции за анотиране на @ Bean. Не цялата тази функция ще бъде извикана (т.е. задавам точка на прекъсване и ги отстранявам грешки). Пролетта ме подлудява, тъй като не мога да проследя код, който не се изпълнява :D.   -  person Haris Hashim    schedule 03.01.2016


Отговори (1)


Възможен отговор от мен

Кодът до момента може да се види тук. Нямам представа как да поставя код тук, освен болката в задника, че трябва да отстъпвам 4 интервала на всеки ред.

Така че това, което направих, е да разширя клас и да добавя персонализираната функционалност в един от заменените методи в този клас.

След това има клас @Configuration, където горният клас се инжектира с помощта на @Bean анотация вместо родителския клас. Мисля, че това е ключът към разбирането

„Обичайният Spring начин: имайте клас @Configuration и инжектирайте ProcessEngine или ProcessEngineConfiguration bean, който е създаден от Spring Boot.“

Въпреки че това, което направих, не е точно горното. Това, което направих, може да се обобщи като

„Имайте клас, който разширява ProcessEngineFactoryBean и променете един метод, за да добавите персонализирани мениджъри на потребители и групи. И след това в класа за конфигурация използвайте този клас вместо ProcessEngineFactoryBean.“

Тъй като не преконфигурирах каквото и да е конфигурирано от spring-boot. И просто променете ProcessEngineFactoryBean с моя собствен клас, който го разширява. Постигнах това, което трябва да постигна, без да нарушавам/променям съществуващата конфигурация.

С това казано, докато кодът направи това, което трябваше да направи. Все още не работи според очакванията. Ето защо публикувам въпрос във форума на Activiti.

person Haris Hashim    schedule 03.01.2016