有这两个应用实际上做同样的事情(如果我是正确的)
@SpringBootApplication
public class DemoApplication {
@Autowired
HelloWorld helloWorld;
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Bean
public CommandLineRunner run() {
helloWorld.setMessage("wow");
return (load) -> {
helloWorld.getMessage();
};
}
}
和
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new
ClassPathXmlApplicationContext("Beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
obj.getMessage();
}
}
都使用
@Component
public class HelloWorld {
private String message;
public void setMessage(String message) {
this.message = message;
}
public void getMessage() {
System.out.println("Your Message : " + message);
}
}
helloWord obj的唯一区别是,如果我在程序中使用MainApp-class,那么helloWorld类不需要@Component注释。
我的问题:
如果我是正确的,SpringBoot注释使得不必定义ClassPathXMLApplicationContext。 @Autowire为我做了这件事。
我现在感兴趣的是,如果AutoWire在开头就说100个对象,那么所有这些对象现在都在IoC容器中了吗?
如果是这样的话:不可能只在另一个类的CTOR中分发该容器,并且可以访问所有保存的对象,例如: (HelloWorld)context.getBean(" helloWorld");要么 (someRandomClass)context.getBean(" someRandomClass")
public CTOR(IOCContainer container) {
this.container = container;
}
而不是那种实施
public CTOR(HelloWorld helloWorld, SomeRandomClass someRandomClass) {
this.helloWorld = helloWorld;
this.someRandomClass = someRandomClass;
}
如果可以的话,我该怎么做? (我的问题背后没有用例/任务,如果可能,我只是感兴趣)
答案 0 :(得分:2)
XML' ish配置方式,您可以通过
定义bean和接线<bean ... etc. pp.
可以完全替换为使用
@Component
public class MyClass ....
或
@Bean
public MyClass myClass() {return new MyClass();}
配置类中的定义。两种方式都将实体放在Spring的IoC容器中。
@Autowire
只是告诉Spring的IoC容器你希望bean有一个bean符合注入@Autowire
的实体的合同。
为了获得对容器的访问权限,您只需要将ApplicationContext
注入您希望拥有它的位置。
答案 1 :(得分:2)
在Spring中有两种创建bean的方法。一种是通过XML配置,另一种是通过注释配置。注释配置是首选方法,因为它比xml配置具有许多优点。
Spring引导与注释或xml配置没有任何关系。它只是启动spring应用程序的一种简单方法。 @Component在应用程序上下文中创建带注释的bean的对象。 @Import或@ImportResource是用于在Spring引导中从Annotations或XML配置加载配置的注释。使用Spring引导,您不需要创建ClassPathXMlCOntext或AnnotationContext对象,但它是由spring boot内部创建的。
@Autowired是一种通过注入而不是紧密耦合到代码来将bean放入任何对象的方法。 Spring容器(应用程序上下文)执行注入工作。只是自动装配任何类都不会在Spring上下文中创建对象。它只是指示Spring上下文在此处在Application上下文中设置对象。您需要在xml配置/或@Component @Service其他注释中显式创建它们。
无需随处取出容器。你可以只是@Autowire ApplicationContext上下文;在任何其他spring bean对象中。您可以使用它来调用getBean(YourBean.class)来获取该bean。