Zasieg Singleton
Korzystając z mechanizmu automatycznego wstrzykiwania zależności możemy również zastępować statyczne "zmienne globalne" oraz singletony. W ten sposób eliminujemy problemy tego typu rozwiązań, wprowadzając możliwość swobodnego konfigurowania i testowania takich obiektów.
W tym ćwiczeniu skupimy się na przekształceniu klasy Logger z singletona w obiekt o specjalnym zasięgu.
- Dodaj zależność od loggera (typu
pl.edu.agh.logger.Logger) wSerializablePersistenceManager. (jako nie-statyczny atrybut klasy). - Dodaj logowanie operacji zapisu i odczytu nauczycieli i klas (pamiętaj o usunięciu plików z danymi:
teachers.daticlasses.dat). - Ustaw logger tak, aby logował wszystkie komunikaty do pliku
persistence.log. Wykorzystaj do tego celu kontener IoC (injector Guice'a). - Obiekt klasy
Loggerpowinien być tworzony tylko raz przez kontener IoC. Wykorzystaj do tego celu adnotację@Singleton(https://github.com/google/guice/wiki/Scopes (opens in a new tab)). Napisz test, który to sprawdza (pl.edu.agh.school.guice.SchoolModuleTest). - Pozbądź się statycznego inicjowania
Logger.getInstance()również z klasySchool. Co należałoby zrobić byLoggerbył zarządzany przez Guice'a również w klasieSchoolClass?