在独立的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。这样做的正确方法是:

@Component

public 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

回到顶部