Spring注解中@Autowired和@Bean的区别详解

 更新时间:2023年06月16日 09:48:06   作者:南猿北辙  
这篇文章主要详细介绍了Spring注解中@Autowired和@Bean二者有什么区别,文中通过两个注解的使用场景介绍了二者的区别,感兴趣的同学可以参考阅读

先了解下这两个注解各自的使用场景,咱就知道两者的区别了。

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 配合使用。

到此这篇关于Spring注解中@Autowired和@Bean的区别详解的文章就介绍到这了,更多相关@Autowired和@Bean的区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot项目打包成war包并部署在tomcat上运行的操作步骤

    SpringBoot项目打包成war包并部署在tomcat上运行的操作步骤

    我们开发 SpringBoot 项目有时我们会需要打包成 war 包,放入外置的 Tomcat 中进行运行,或者使用工具idea直接启动,便于开发调试,本文给大家分享SpringBoot项目打包成war包并部署在tomcat上运行的操作步骤,感兴趣的朋友一起看看吧
    2024-03-03
  • spring boot配置ssl实现HTTPS的方法

    spring boot配置ssl实现HTTPS的方法

    这篇文章主要介绍了spring boot配置ssl实现HTTPS的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03
  • JDK动态代理提高代码可维护性和复用性利器

    JDK动态代理提高代码可维护性和复用性利器

    这篇文章主要为大家介绍了JDK动态代理提高代码可维护性和复用性利器,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • java 优雅关闭线程池的方案

    java 优雅关闭线程池的方案

    这篇文章主要介绍了java 优雅关闭线程池的方案,帮助大家更好的理解和学习Java,感兴趣的朋友可以了解下
    2020-11-11
  • 基于Java中对域和静态方法的访问不具有多态性(实例讲解)

    基于Java中对域和静态方法的访问不具有多态性(实例讲解)

    下面小编就为大家带来一篇基于Java中对域和静态方法的访问不具有多态性(实例讲解)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-10-10
  • 基于module-info.class的问题

    基于module-info.class的问题

    这篇文章主要介绍了基于module-info.class的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • Java面试题冲刺第三十天--数据库(6)

    Java面试题冲刺第三十天--数据库(6)

    这篇文章主要为大家分享了最有价值的三道关于数据库的面试题,涵盖内容全面,包括数据结构和算法相关的题目、经典面试编程题等,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Java高效映射工具MapStruct的使用示例

    Java高效映射工具MapStruct的使用示例

    MapStruct 是一个 Java 注解处理器,用于在不同 Java Beans 或数据传输对象(DTOs)之间自动生成类型安全的映射代码,这是一个编译时映射框架,意味着它利用注解在编译时生成代码,本文将给大家介绍一下Java注解处理器MapStruct的使用示例,需要的朋友可以参考下
    2023-12-12
  • SpringBoot中对SpringMVC的自动配置详解

    SpringBoot中对SpringMVC的自动配置详解

    这篇文章主要介绍了SpringBoot中的SpringMVC自动配置详解,Spring MVC自动配置是Spring Boot提供的一种特性,它可以自动配置Spring MVC的相关组件,简化了开发人员的配置工作,需要的朋友可以参考下
    2023-10-10
  • 深入理解Java设计模式之状态模式

    深入理解Java设计模式之状态模式

    这篇文章主要介绍了JAVA设计模式之职责链模式的的相关资料,文中示例代码非常详细,供大家参考和学习,感兴趣的朋友可以了解
    2021-11-11

最新评论