[英]Spring Injection: What is the correct way of using context
我有一个关于Spring Injection的问题。
基本教程告诉我们,我们应该创建一个上下文以获得豆:
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
但是,如果我在每个类中创建一个上下文,那么我可以从这些上下文中获取的Bean包含不同的实例。 例如
public class MyClass1 {
public void myMethod() {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
MyBean myBean1 = (MyBean)context.getBean("myBean");
}
}
public class MyClass2 {
public void myMethod() {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
MyBean myBean2 = (MyBean)context.getBean("myBean");
}
}
在这里,myBean1和myBean2是两个不同的对象,尽管它应该是单例的。
使用上下文的正确方法是什么,以便可以保证只创建一个整个系统用于获取Bean的上下文?
有没有办法像Google Guice这样使用Spring使用注释来解决依赖注入?
非常感谢。
您可以始终使用批注@Autowired来标记这是您要在类中注入的bean
使用上下文的正确方法是什么,以便可以保证只创建一个整个系统用于获取Bean的上下文?
仅调用一次WhateverApplicationContext的构造函数...
有没有办法像Google Guice这样使用Spring使用注释来解决依赖注入?
当然有。 在弹簧参考手册的以下部分中进行了记录:
您甚至可以使用与Guice或CDI相同的注解来进行注入:
一次启动上下文,如果您想在您的类中使用它,则实现ApplicationContextAware。
public Class1 implement ApplicationContextAware{
private ApplicationContext context;
private void setApplicationContext(ApplicationContext applicationContext) {
this.context = applicationContext;
}
启动上下文后将自动调用该方法。
您不应该自己使用Spring的ApplicationContext
来设置您的应用程序。 您应该让Spring的ApplicationContext
为您设置应用程序。
通用模式是在应用程序的启动点实例化ApplicationContext
,无论它是main()
方法还是ServletContextListener
(Spring MVC)。 您可以在上下文中声明Bean及其之间的关系,例如注入目标。 您永远不会在同一应用程序中两次初始化同一上下文。
为什么不创建一个单独的类并创建一个以bean名称作为参数的方法,而您只能从上下文中获取bean并返回它。 因此,您将获得与不反复加载spring配置文件相同的实例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.