spring帮助我们管理Bean分为两个部分,一个是注册Bean,一个装配Bean。
完成这两个动作有三种方式:
在自动配置的方式中,使用@Component去告诉Spring,我是一个bean,你要来管理我,然后使用@AutoWired注解去装配Bean(所谓装配,就是管理对象直接的协作关系)。然后在JavaConfig中,@Configuration其实就是告诉spring,spring容器要怎么配置(怎么去注册bean,怎么去处理bean之间的关系(装配))。那么久很好理解了,@Bean的意思就是,我要获取这个bean的时候,你spring要按照这种方式去帮我获取到这个bean。到了使用xml的方式,也是如此。君不见< bean >标签就是告诉spring怎么获取这个bean,各种就是手动的配置bean之间的关系。
@Compent 作用其实就是自动装配,也相当于 XML配置,
@Component
public class Student {
private String name = "lkm";
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
@Bean 需要在配置类中使用,即类上需要加上@Configuration注解
@Configuration
public class WebSocketConfig {
@Bean
public Student student(){
return new Student();
}
两者都可以通过@Autowired装配
@Autowired
Student student;
PS: springboot中的@SpringBootApplication:申明让spring boot自动给程序进行必要的配置,这个配置等同于:
@Configuration ,@EnableAutoConfiguration 和 @ComponentScan 三个配置。所以也可以直接在启动类里面加上第三方要注入的Bean
总结:
那为什么有了@Compent,还需要@Bean呢?
如果你想要将第三方库中的组件装配到你的应用中,在这种情况下,是没有办法在它的类上添加@Component注解的,因此就不能使用自动化装配的方案了,但是我们可以使用@Bean,当然也可以使用XML配置。
还有一种情况是,在common模块中写了类,在别的模块中需要导入使用,也可以使用@Bean的方式,比如:IdWorker生成类。
然后:
@Autowired
private IdWorker idWorker;
@ImportResource
@ImportResource要配和@Configuration或者是@SpringBootApplication使用,,用于将applicationContext.xml文件中的bean加载到Application Context中。
@Configuration
@ImportResource({"classpath*:applicationContext.xml"})
public class XmlConfiguration {
}
@ImportResource等同于xml配置:
<import resource="cons-injec.xml" />
@Import注解是引入带有@Configuration的java类。
@ImportResource是引入spring配置文件.xml
其他:
springboot注解与xml配置对应关系
context:component-scan @ComponentScan
<context:component-scan base-package="com.apple"/> @ComponentScan("com.apple")
参考文章:
https://segmentfault.com/a/1190000014119872?utm_source=tag-newest
https://blog.csdn.net/qq_38534144/article/details/82414201
https://blog.csdn.net/tuoni123/article/details/79985359
手机扫一扫
移动阅读更方便
你可能感兴趣的文章