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

2024-04-23 17:58:39 浏览数 (2)

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字符串和类。

模糊特性

  • 自动装配不如显式装配精确,如果有可能,建议使用显式装配。

0 人点赞