在独立的Java应用程序中使用Spring 3 autowire
这是我的代码:
public class Main { public static void main(String[] args) {
Main p = new Main();
p.start(args);
}
@Autowired
private MyBean myBean;
private void start(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("META-INF/config.xml");
System.out.println("my beans method: " + myBean.getStr());
}
}
@Service
public class MyBean {
public String getStr() {
return "string";
}
}
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config />
<context:component-scan base-package="mypackage"/>
</beans>
为什么不起作用?我懂了NullPointerException
。是否可以在独立的应用程序中使用自动装配?
回答:
Spring在独立应用程序中工作。你使用错误的方式来创建Spring bean。这样做的正确方法是:
@Componentpublic class Main {
public static void main(String[] args) {
ApplicationContext context =
new ClassPathXmlApplicationContext("META-INF/config.xml");
Main p = context.getBean(Main.class);
p.start(args);
}
@Autowired
private MyBean myBean;
private void start(String[] args) {
System.out.println("my beans method: " + myBean.getStr());
}
}
@Service
public class MyBean {
public String getStr() {
return "string";
}
}
在第一种情况下(问题中的那个),你将自己创建对象,而不是从Spring上下文中获取它。因此,Spring没有机会获得Autowire
依赖关系(这会导致NullPointerException
)。
在第二种情况(此答案中的一种)中,你是从Spring上下文中获取bean的,因此它是Spring托管的,而Spring负责autowiring
。
以上是 在独立的Java应用程序中使用Spring 3 autowire 的全部内容, 来源链接: utcz.com/qa/408021.html