使用方式
直接注入
新建一个Man类,不加注解,不在启动时注入到spring IOC容器中
public class Man {
public void say() {
System.out.println("I am a man.");
}
}
新建一个Woman类,不加注解,不在启动时注入到spring IOC容器中
public class Woman {
public void say() {
System.out.println("I am a woman.");
}
}
在启动类中用@Import注入Man.class和Woman.class
@SpringBootApplication
@Import({Man.class, Woman.class})
public class AddApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(AddApplication.class, args);
Man man = context.getBean(Man.class);
Woman woman = context.getBean(Woman.class);
man.say();
woman.say();
}
}
得到输出结果
2019-09-04 16:01:38.836 INFO 23088 --- [ restartedMain] c.p.a.AddApplication : Started AddApplication in 13.614 seconds (JVM running for 15.87)
I am a man.
I am a woman.
可以看到这个注解可以让这个类的实例不需要在启动的时候注入,而是在运行中实际需要用到时开始注入。
使用配置类
创建一个配置类,类上面不需要加注解,但是获取Man和Woman的方法要加@Bean注解注入
public class HumanConfig {
@Bean
public Man getMan() {
return new Man();
}
@Bean
public Woman getWoman() {
return new Woman();
}
}
在启动类中用@Import注入HumanConfig.class
@SpringBootApplication
@Import({HumanConfig.class})
public class AddApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(AddApplication.class, args);
Man man = context.getBean(Man.class);
Woman woman = context.getBean(Woman.class);
man.say();
woman.say();
}
}
得到输出结果
2019-09-04 16:09:03.368 INFO 21892 --- [ restartedMain] c.p.a.AddApplication : Started AddApplication in 13.614 seconds (JVM running for 15.87)
I am a man.
I am a woman.
通过配置类的好处就是可用统一入口,方便查找资源和注入时使用的方便