Problem ze wstrzyknięciem Beana

0

Mam jakiś interface w ktorym mam statyczną metodę.

 public interface ConfigurationHelper { 	
	static SomeTool.Builder someToolBuilder() {
		return SomeTool.builder()
			.logger(new BestLogger())
			.logLvl(FULL);
	}
 }

Ten builder ma jeszcze jedno pole które chciałbym wypełnić.

.adapter(new CustomAdapter())

Jednak mam problem z tym adapterem, bo przy korzystaniu z niego wywala mi błąd że DataProvider jest nullem.
CustomAdapter wygląda tak.

 @Service
 public class CustomAdapter extends SomeAdapter {
 	@Autowired
	private DataProvider dataProvider;
 	
	@Override
	public void apply(SomeDefaultObject someDefaultObject) {
		someDefaultObject.setSomethingImportant(dataProvider.getSomethingImportant());
	}
	
 }

Jedyne co wygooglowałem to @Configurable ale nie działa. Jak wstrzyknąć te dane?

1

Zapewne masz gdzieś jakąs klasę , która DataProvider implementuje? Pewnie się nazywa DataProvider? Zgadłem?
Wtedy kod możesz zrobić tak:

 public interface ConfigurationHelper {     
    static SomeTool.Builder someToolBuilder() {
        return SomeTool.builder()
            .logger(new BestLogger())
            .adapter(new CustomAdapter())
            .logLvl(FULL);
    }
 }

 public class CustomAdapter extends SomeAdapter {
    private DataProvider dataProvider = new DataProvider();
     @Override
    public void apply(SomeDefaultObject someDefaultObject) {
        someDefaultObject.setSomethingImportant(dataProvider.getSomethingImportant());
    }
 
 }

Profit jest taki:

  1. mniej kodu.
  2. możesz po tym usunąć Springa ze swoich zależności, bo pewnie nie potrzebujesz

Można by jeszcze:

  • static buildera przerobić na normalna metodę w normalnej klasie, bo ten static to raczej jakiś dziwaczny koncept.
  • DataProvider zrobić polem **final ** i zapodać jako argument konstruktora, żeby można było DI robić.

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