前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Spring中自动装配的方式有哪些?

Spring中自动装配的方式有哪些?

作者头像
用户10358987
发布2024-04-23 17:58:39
820
发布2024-04-23 17:58:39
举报
文章被收录于专栏:javajava

1 什么是Spring内部的bean?

当一个bean仅被用作另一个bean的属性时,它能被声明为一个内部bean,为了定义inner bean,在Spring的基于XML的 配置元数据中,可以在或元素内使用元素,内部bean通常是匿名的,它们的Scope一般是prototype。

2 什么是bean装配?

bean装配是指在Spring容器中把bean组装到一起,前提是容器需要知道bean的依赖关系,如何通过依赖注入来把它们装配到一起。

3 什么是bean的自动装配?

Spring容器能够自动装配相互合作的bean,这意味着容器不需要和配置,能通过Bean工厂自动处理bean之间的协作。

4 不同方式的自动装配

在Spring中,支持五种自动装配模式,可以用来指导Spring容器用自动装配方式来进行依赖注入。

(1)no
  • 这是Spring框架的默认设置,在该设置下自动装配是关闭的,开发者需要自行在bean定义中用标签明确的设置依赖关系。
代码语言:javascript
复制
<!-- no – 缺省情况下,自动配置是通过“ref”属性手动设定 -->
	<bean id="person" class="org.spring.autowring.Person">
		<property name="ability" ref="ability"></property>
	</bean>
	<bean id="ability" class="org.spring.autowring.Ability">
		<property name="skill" value="Java Programming"></property>
	</bean>
(2)byName
  • 根据Bean的名字进行自动装配。当向一个bean中自动装配一个属性时,容器将根据bean的名称自动在在配置文件中查询一个匹配的bean。如果找到的话,就装配这个属性,如果没找到的话就报错。
代码语言:javascript
复制
<!-- Auto-Wiring "byName" 按属性名称自动装配 -->
	<bean id="person" class="org.spring.autowring.Person" autowire="byName"/> 
    <bean id="ability" class="org.spring.autowring.Ability"> 
        <property name="skill" value="Java Programming"></property> 
   </bean>
(3)byType
  • 根据Bean的类型进行自动装配。当向一个bean中自动装配一个属性时,容器将根据bean的类型自动在在配置文件中查询一个匹配的bean。如果找到的话,就装配这个属性,如果没找到的话就报错。
代码语言:javascript
复制
<!-- Auto-Wiring "byType" 按属性名称自动装配 -->
    <bean id="person" class="org.spring.autowring.Person" autowire="byType"/>
    <bean id="ability" class="org.spring.autowring.Ability">
        <property name="skill" value="Java Programming"></property>
    </bean>
(4)constructor
  • 类似于byType,不过是应用于构造器的参数,如果正好有一个Bean与构造器的参数类型相同则可以自动装配,否则会导致错误。
代码语言:javascript
复制
<!-- constructor – 在构造函数参数的byType方式。 -->
    <!-- 构造方法的参数 -->
    <bean id="person" class="org.spring.autowring.Person">
        <constructor-arg>
            <ref bean="ability"></ref>
        </constructor-arg>
    </bean>
    <bean id="ability" class="org.spring.autowring.Ability">
        <property name="skill" value="Java Programming"></property>
    </bean>
(5)autodetect
  • 该模式自动探测使用构造器自动装配或者byType自动装配。首先,首先会尝试找合适的带参数的构造器,如果找到的话就是用构造器自动装配,如果在bean内部没有找到相应的构造器或者是无参构造器,容器就会自动选择byTpe的自动装配方式。
代码语言:javascript
复制
	<bean id="HelloWorld" class="com.example.demo.test.HelloWorld"
		autowire="autodetect">
		<property name="msg">
			<value>HelloWorld</value>
		</property>
	</bean>
	<bean id="date" class="java.util.Date"></bean>

5 自动装配有哪些局限性?

重写

  • 你仍需用 < constructor-arg > 和 < property > 配置来定义依赖,意味着总要重写自动装配。

基本数据类型

  • 你不能自动装配简单的属性,如基本数据类型,String字符串和类。

模糊特性

  • 自动装配不如显式装配精确,如果有可能,建议使用显式装配。
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 什么是Spring内部的bean?
  • 2 什么是bean装配?
  • 3 什么是bean的自动装配?
  • 4 不同方式的自动装配
    • (1)no
      • (2)byName
        • (3)byType
          • (4)constructor
            • (5)autodetect
            • 5 自动装配有哪些局限性?
            相关产品与服务
            容器服务
            腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
            http://www.vxiaotou.com