Jak tworzyć nowy prototype bean wstrzykując go do singleton bean?

Odpowiedz Nowy wątek
2016-05-05 14:10
Czarny Młot
0

Używam springa.
Jak tworzyć nowy prototype bean za każdym razem gdy wstrzykujemy go do singleton bean?

Normalnie jeśli wstrzyknę prototype beana do singletona to ten objekt będzie i tak tylko raz zainicjalizowany.

Znacie sposób jak to obejść?

Pozostało 580 znaków

2016-05-05 14:29
0

Ja używałem proxyMode np. coś takiego:

@Scope(value = ConfigurableBeanFactory.SCOPE_PROTOTYPE, proxyMode =   ScopedProxyMode.INTERFACES)

Pozostało 580 znaków

2016-05-05 14:50
Czarny Młot
0

hmm faktycznie może działać.

A czy jak będę miał coś odpalane w kilku wątkach to nie będzie jakiś problemu?

Pozostało 580 znaków

2016-05-05 15:15
Czarny Młot
0

i jeśli takich beanó nie jest mało... to czy to nie jest bardzo kosztowne ?

Pozostało 580 znaków

2016-05-05 21:01
Czarny Lew
0

potrzebuje czasem odswiezyc stan tych beanow, ale obawiam sie, ze tworzenie tych obiektow za kazdym razem to troche hardcore.

Czy moze lepiej zrobic Scheduler który będzie odświeżał je co jakiś czas?

Pozostało 580 znaków

2016-05-05 22:32
0

Pytanie po co tak? Singleton bean żyje przez cały czas działania aplikacji (uproszczenie patrz konfiguracja inicjalizatorów) i JEST TYLKO JEDEN. Prototype bean żyje w określonym czasie i JEST ICH DUŻO. Zatem jak jesteś wstanie stwierdzić czy w jednej jedynej instancji singletona już czas podmienić pole na kolejny prototyp, czy jeszcze należy poczekać?

ps. beany można każdorazowo pobierać z kontekstu i wtedy to zaczyna mieć sens.

Pozostało 580 znaków

2016-05-05 22:42
Biały Mleczarz
0

No pewnie to jest zly trop.

Moj problem jest taki, ze to beany z rest clientami. Potrzebuje im co jakis, dynamicznie podawac im urle gdzie maja callowac , odswiezac .

I zastanawiam sie jak najlepiej to robic.

Jeszcze raz, po polsku, czyli poka kod. - Koziołek 2016-05-05 22:53

Pozostało 580 znaków

2016-05-05 23:24
Biały Mleczarz
0

Nie moge.

Mamy microservices i rozne srodowiska. Jest sobie tez service discovery w ktorym appki sie rejestruja i moze podawac linki dla odpowiedniego srodowiska. Appki sa w stanie cachowac ta informacje. Potrzebne im te urle, zeby wiedzirc gdzie leza inne serwisy.

Wczesniej mielismy to podane w pliku a rest clienty \ ich beany byly tworzone z odpowiednimi adresami przy starcie aplikacji.

Ale teraz chcialbym moc odswiezac linki do odpowiednich aplikacji.

Pozostało 580 znaków

2016-05-06 09:20
0

Kod, który sprawia problem zawsze można podać. Co będzie w tym przypadku singletonem, co prototypami?

Pozostało 580 znaków

2016-05-06 09:24
Czarny Młot
0

singletonem będą praktycznie wszystkie inne beany a rest klienty prototypami.
Ale obawiam się, że jest to słabe rozwiązanie, bo tych prototypów będzie się trochę twórzyć, spring wokół tego będzie robił jeszcze proxy.

Nie wiem czy nie spowoduje to problemow z performancem.

Pozostało 580 znaków

2016-05-06 09:35
0

Jeżeli zatem masz jakiś serwis w którym klienci rejestrują się to można zrobić tak, że w tym serwisie trzymasz mapę z URLami do klientów, a następnie w tworzysz beany za pomocą np. kontekstu:

Client client = applicationContext.getBean(Client.class, urls.get("clientName"));

i zabijasz go na końcu metody. Czy to jest wydajne? Jeżeli nadal kilka rzędów wielkości szybsze niż komunikacja po sieci (chyba, że masz specjalizowany sprzęt z 10Gbit ethernet w ramach łączenia szaf). Można to dodatkowo przyozdobić jakimiś WeakHashMapami, które będą robić za cache.

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0