先了解下这两个注解各自的使用场景,咱就知道两者的区别了。
1,@Autowired
@Autowired 注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。 通过 @Autowired的使用来消除 set ,get方法。在此之前,我们对bean配置属性时,是这么用的
<property name="属性名" value=" 属性值"/>
通过这种方式来,配置比较繁琐,而且代码比较多。在Spring 2.5 引入了 @Autowired 注释
使用@Autowired的原理:
其实在启动spring IOC时,容器自动装载了一个AutowiredAnnotationBeanPostProcessor后置处理器,当容器扫描到@Autowied、@Resource(是CommonAnnotationBeanPostProcessor后置处理器处理的)或@Inject时,就会在IOC容器自动查找需要的bean,并装配给该对象的属性
2,@Bean
@Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解(@Controller,@Service,@Repository)的类里。添加的bean的id为方法名@Bean注解是Spring从3.0版本开始引入的
spring的@Bean注解用于告诉方法,产生一个Bean对象(默认单例),然后这个Bean对象交给Spring管理。产生这个Bean对象的方法Spring只会调用一次,随后这个Spring将会将这个Bean对象放在自己的IOC容器中。
实例:
@Configuration
public class AppConfig {
@Bean
public UserService userService() {
return new UserServiceImpl();
}
}
等同于以下XML配置:
<beans>
<bean id="userService" class="com.acme.UserServiceImpl"/>
</beans>
两者区别:
@Autowired 可修饰变量和方法,用于完成自动装配(将需要的外部资源注入),自动装配的前提你要先有才能装配(该资源需要存在于IOC容器中),直接引用资源就行。
@Bean 修饰的方法表示初始化一个对象并交由Spring IOC去管理,此方法返回需要是一个对象。@Bean 只能和@Component, @Repository,@Controller,@Service,@Configration 配合使用。