我正在尝试检查bean作用域,这是在singleton bean中注入的原型。当我使用@Lookup批注时,它将引发空指针异常。
在singletonBean类上赋予null指针...实际上,返回的null应该被cglib覆盖,并且应该返回原型范围内的bean的权利...
image/*
SingletonBean.java
AppConfiguration.java
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;
import Bean.ProtoBean;
import Bean.SingletonBean;
@Configuration
public class AppConfiguration {
@Bean
@Scope("prototype")
public ProtoBean protoBean() {
return new ProtoBean();
}
@Bean
@Scope("singleton")
public SingletonBean singletonBean() {
return new SingletonBean();
}
}
App.java
@Component
public class SingletonBean {
public SingletonBean() {
System.out.println("SingletonBean");
}
public ProtoBean fromProto() {
ProtoBean protoBean = getProtoBean();
//throws nullpointer here
System.out.println("beans is here: "+protoBean.hashCode());
return protoBean;
}
@Lookup
public ProtoBean getProtoBean() {
return null;
}
}
答案 0 :(得分:0)
我曾经用这种方法做过同样的事情,然后由于某种未知的原因,它停止工作,并产生了同样的NPE问题。我相信Spring在用GCLIB编译的实现替换您自己的实现方面存在问题。
最后,我使用了factory method approach,即,客户端bean具有Spring应用程序上下文,并使用它返回getProtoBean()
中所需的依赖项。与使用@Lookup
相比,它不那么简单,但似乎更可靠。