我想执行一个非常简单的例子来解释Spring-Boot中的IoC概念。
为此,我创建了一个Bean,它将@Autowired转换为一个main-class,它有一个方法可以对bean执行某些操作。
豆子:
主要:
@Component
public class MyMain {
@Autowired
private MyBean bean1;
public void usingTheBean()
{
bean1.setName("Thats my first bean!");
bean1.setAttribute("And thats just an attribute");
System.out.println(bean1);
}
public static void main(String[] args) {
//MyMain main = new MyMain();
//main.usingTheBean();
}
}
我的SpringBootApplication:
@SpringBootApplication
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
MyMain main = new MyMain();
main.usingTheBean();
}
}
如何启动Main-class?没有得到
java.lang.NullPointerException
主要的@Autowired Bean“MyBean”?
我知道NullPointer-Exception的原因是我使用“new”关键字创建了Main类。
但问题更多地集中在“如何使用spring-boot启动主类”这个问题
答案 0 :(得分:2)
通常,您不希望直接使用上下文来自己创建bean。您应该让上下文初始化,然后只使用自动装配的bean。最有可能的是,你解决这个问题的方式与实现它的Spring方式截然不同。
您应该看一下以下示例:
或者,您可以通过配置解决此问题:
@Configuration
public class MyConfig {
@Bean
public MyBean myBean() {
MyBean bean = new MyBean();
bean.setName("...");
bean.setAttribute("...");
return bean;
}
}
然后您可以简单地使用
@Autowired
MyBean myBean;
自动装配它。
另一种替代方法是从配置文件(例如application.properties)中注入值,如果在您的情况下可以这样做:
@Component
public class MyBean {
@Value("${my.config.value}")
private String name;
@Value("${my.config.attribute}")
private String attribute;
public MyBean(){
}
...
在application.properties中包含以下条目:
my.config.value = Some value content
my.config.attribute = Some attribute content