Java 为什么惰性加载在没有@lazy on@组件的情况下工作

Java 为什么惰性加载在没有@lazy on@组件的情况下工作,java,spring,lazy-loading,spring-annotations,lazy-initialization,Java,Spring,Lazy Loading,Spring Annotations,Lazy Initialization,我有一个Spring@组件,它作为一个依赖项添加到另一个类中,并带有注释@Lazy。根据,为了工作,@组件本身应该用@Lazy注释。但是对于下面的代码,它似乎可以在不添加@Lazy注释的情况下工作 惰性组件接口 public interface Lazzy { public void doSome(); } 惰性组件实现 import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import

我有一个Spring
@组件
,它作为一个依赖项添加到另一个类中,并带有注释
@Lazy
。根据,为了工作,
@组件
本身应该用
@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");

    }
}
跑步课

@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
如果我在私人Lazzy Lazzy上取下
@Lazy
lazy.doSome()一起使用仍然被注释掉,我看到以下内容(如预期的)

问题: 为什么此代码在
LazzyImpl
上没有
@lazy
注释以及
@Component
的情况下工作(即惰性初始化)


给定的示例使用的是Spring 4.0.3.RELEASE版本。

您可以使用默认的lazy init在容器级别控制延迟初始化。在test-context.xml中有这样的配置吗。感谢您的输入@JerinJoseph。1.我不能使用您建议的默认lazy init,因为我的Spring是4.0.3。2.我不是在寻找一种方法来实现这一点,我的问题是“为什么尽管没有遵循提供的URL中给出的说明,但延迟加载仍然有效”您可以使用默认的lazy init在容器级别控制延迟初始化。在test-context.xml中有这样的配置吗。感谢您的输入@JerinJoseph。1.我不能使用您建议的默认lazy init,因为我的Spring是4.0.3。2.我不是在寻找一种方法来实现这一点,我的问题是“为什么尽管没有遵循提供的URL中给出的说明,延迟加载仍然有效?”
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