Java 为什么惰性加载在没有@lazy on@组件的情况下工作
我有一个SpringJava 为什么惰性加载在没有@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
@组件
,它作为一个依赖项添加到另一个类中,并带有注释@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