Почему ленивая загрузка работает без @Lazy на @Component - PullRequest
1 голос
/ 18 октября 2019

У меня есть Spring @Component, который добавляется как зависимость в другой класс с аннотацией @Lazy. Согласно https://www.baeldung.com/spring-lazy-annotation, https://howtodoinjava.com/spring5/core/spring-bean-eager-vs-lazy-init/, https://stackoverflow.com/a/50041333/6923588 сам @Component должен быть помечен @Lazy для работы. Но следующий код кажется работающим без добавления аннотации @Lazy.

Интерфейс отложенного компонента.

public interface Lazzy {
    public void doSome();
}

Реализация отложенного компонента.

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Component;

@Component
// @Lazy // annotation is commented out
public class LazzyImpl implements Lazzy {
    private static Logger logger = LogManager.getLogger(LazzyImpl.class);

    @PostConstruct
    private void init() {
        logger.debug("in init");
    }

    @Override
    public void doSome() {
        logger.debug("am called");

    }
}

Класс Runner.

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "/test-context.xml" })
public class LazyTest {
    private static Logger logger = LogManager.getLogger(LazyTest.class);

    @Autowired
    @Lazy
    private Lazzy lazzy;

    @Test
    public void test_Lazy() {
        logger.debug("in test_Lazzy");
        // lazy.doSome(); // intentionally commented out to check whether LazzyImpl is initialized or not
        logger.debug("in test_Lazzy over");
    }
}

Когда я запускаю это, я вижу следующее.

LazyTest.test_Lazy(LazyTest.java:25) - in test_Lazzy
LazyTest.test_Lazy(LazyTest.java:27) - in test_Lazzy over

Если я снимаю @Lazy на private Lazzy lazzy; с lazy.doSome();, все еще закомментированным, я вижуследующий (как и ожидалось).

LazzyImpl.init(LazzyImpl.java:17) - in init
LazyTest.test_Lazy(LazyTest.java:25) - in test_Lazzy
LazyTest.test_Lazy(LazyTest.java:27) - in test_Lazzy over

Вопрос: Почему этот код работает (т.е. инициализируется лениво) без @Lazy аннотации на LazzyImpl вместе с @Component?

Пример использования Spring 4.0.3.RELEASE версии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...