问题
调用jar包的类,什么时候可以使用
@Autowired
直接引入,什么时候需要@Bean
注入才能使用呢?
场景
一、需要使用@bean注解的
例如我要使用导入jar包中的RestTemplate这个类,直接引用@Autowired
会报错,报的错误是:无法注入,未找到“RestTemplate”类型的bean,意思就是再bean工厂里面没有,所以不能直接引入。如下图
@Configuration:声明一个类为配置类,用于取代bean.xml配置文件注册bean对象。
@Bean:Spring的@Bean注解用于告诉方法,产生一个Bean对象,然后这个Bean对象交给Spring管理。
这个时候我们就要用@Bean
注解和@Configuration
注入,说白了上面两个注解的作用就是自动把你要用的类注入到bean工厂中,你通过@Bean
注入完之后,就可以使用@Autowired
直接引入了,也不会报错。如下图
二、使用@Autowired可以直接引入的
当然也有很多jar包里的类不需要@Baen
注解,例如DiscoveryClient类@Autowired
直接引入就可以使用,如下图
三、两者的区别
(1)需要使用@bean注解的
怎么判断使用前是否要用@Bean
注入呢,就以上面两个类为例子比较一下,先看没有使用@Bean
注入的样子,如下图
这是已经使用@Bean
注入完以后的,Navigate to the Spring bean declaration(s) : 注入到Spring bean声明,如下图
(2)使用@Autowired可以直接引入的
再看一下不需要@Bean
的类
进来我们就能看到,这个类已经被注入到bean工厂了,所以不需要我们再注入
综合上述你们就点进去看是否有注入的标志就行了,没有你们就注入一下,有就直接用就ok