• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

如何完成spring的最小化XML配置

java 搞代码 4年前 (2022-01-09) 13次浏览 已收录 0个评论

一、自动装配

1、四种类型的自动装配

类型 解释 xml 配置
byName 根据 Bean 的 name 或者 id <bean id=”bean” class=”…” autowire=”byName”/>
ByType 根据 Bean 类型自动装配 <bean id=”bean” class=”…” autowire=”byType”/>
contructor 根据 Bean 的构造器入参具有相同类型 同上
Autodetect 首先使用 contructor,失败再尝试 byType 同上

byType 在出现多个匹配项时不会自动选择一个然是报错,为避免报错,有两种办法:1.使用<bean>元素的 primary 属性,设置为首选 Bean,但所有 bean 的默认 primary 都是 true,因此我们需要将所有非首选 Bean 设置为false;2.将 Bean 的autowire-candidate熟悉设置为false,取消 这个 Bean 的候选资格,这个 Bean 便不会自动注入了。

contructor 自动装配和 byType 有一样的局限性,当发现多个 Bean 匹配某个构造器入参时,Spring 不会尝试选择其中一个;此外,如果一个类有多个构造器都满足自动装配的条件,Spring 也不会猜测哪个更合适使用。

2、默认自动装配

如果需要为 Spring 应用上下文中的每个 Bean(或者其中的大多数)配置相同的 autowire 属性,可以在根元素<beans>上增加一个 default-autowire 属性,默认该属性设置为 none。该属性只应用于指定配置文件中的所有 Bean,并不是 Spring 上下文中的所有 Bean。

3、混合使用自动装配和显式装配

当我们对某个 Bean 使用了自动装配策略,并不代表我们不能对该 Bean 的某些属性进行显示装配,任然可以为任意一个属性配置<property>元素,显式装配将会覆盖自动装配。但是当使用 constructor 自动装配策略时,我们必须让 Spring 自动装配构造器所有入参,不能使用<constructor-arg>元素进行混合。

二、注解装配

从 Spring2.5 开始,可以使用注解自动装配 Bean 的属性,使用注解允许更细粒度的自动装配,可选择性的标注某一个属性来对其应用自动装配。Spring 容器默认禁用注解装配,需要在 Spring 配置中启用,最简单的启用方式是使用 Spring 的 context 命令空间配置中的<context:annotation-config>,如下所示:

<beans ...>
<context:annotation-config/>
<!-- bean declarations go here -->
</beans>

Spring3 支持几种不同的用于自动装配的注解:

  • Spring 自带的@Autowired 注解
  • JSR-330 的@Inject 注解
  • JSR-250 的@Resourc
    本文来源gaodai.ma#com搞##代!^码网(

    e 注解

1、使用@Autowired

@Autowired 用于对被注解对象启动 ByType 的自动装配,可用于以下对象:

  • 类属性,即使私有属性也能注入
  • set 方法
  • 构造器
  • 任意需要装配 Bean 的方法

在使用@Autowired 时有两种情况会出错:没有匹配的 Bean 和存在多个匹配的 Bean,但是都有对应的解决方法。

当没有匹配 Bean 时,自动装配会抛出 NoSuchBeanDefinitionException,如果不想抛出可使用 required 属性,设置为 false 来配置可选的自动装配,即装配失败就不进行装配,不会报错。

@Autowired(required=false)

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:如何完成spring的最小化XML配置

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址