<Spring实战>3:最小化Spring XML配置

1 自动装配 Bean 属性

1.1 4 种类型的自动装配

  • byName:把与 Bean 的属性具有相同名字或 ID 的其他 Bean 自动装配到 Bean 的对应属性中
  • byType:把与 Bean 的属性具有相同类型的其他 Bean 自动装配到 Bean 的对应属性中
  • constructor:把与 Bean 的构造器入参具有相同类型的其他 Bean 自动装配到 Bean 构造器的对应入参中
  • autodetect:首先尝试使用 constructor 进行自动装配,如果失败再尝试使用 byType 进行自动装配

1.2 默认自动装配

1.3 混合使用自动装配和显示装配

2 使用注解装配

  Spring 默认禁用注解装配,需要在配置中启用:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <context:annotation-config/>

</beans>

Spring 3 支持多种不同的注解:

  • @Autowired:Spring 自带
  • @Inject:JSR-330
  • @Resource:JSR-250

2.1 使用@Autowired

  @Autowired 可以标注 setter 方法,代替 <property> 元素,会尝试对该方法执行 byType 自动装配。也可以标注需要自动装配 Bean 引用的任意方法。

  @Autowired 也可以标注构造器,即使在 xml 配置文件中没有使用 <constructor-arg> 元素,也进行自动装配。

  @Autowired 可以直接标注属性,并删除 setter 方法。

问题:应用中必须只能有一个 Bean 适合装配到注解所标注的属性或参数中。

如果属性不一定要装配,null 也是可以接受的,可以设置 required 属性为 false,如:

@Autowired(required = false)
private Instrument instrument;

如果有多个 Bean 满足装配条件,可以配合 Spring 的 @Qualifier 注解来指定 Bean:

@Autowired
@Qualifier("saxophone")
private Instrument instrument;

此时将尝试注入 id 为 saxophone 的 Bean。

创建自定义的 Qualifier:

import org.springframework.beans.factory.annotation.Qualifier;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

@Target({ElementType.FIELD, ElementType.PARAMETER, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier
public @interface StringedInstrument {
}
import com.hundsun.idol.Instrument;
import com.hundsun.idol.StringedInstrument;

@StringedInstrument
public class Guitar implements Instrument {
    @Override
    public void play() {
        //
    }
}

当使用 @StringedInstrument 对自动装配的属性进行限定:

@Autowired
@StringedInstrument
private Instrument instrument;

Spring 会把 Bean 缩小到只有被 @StringedInstrument 注解所标注的 Bean。

2.2 借助 @Inject 实现基于标准的自动装配

2.3 在注解注入中使用表达式

  @Value

3 自动检测 Bean

  在配置中增加 <context:annotation-config> 有助于完全消除 <constructor-arg> 和 <property> 元素,但仍需要显示定义 <bean>。

  <context:component-scan> 元素除了完成和 <context:annotation-config> 一样的工作,还允许 Spring 自动检测 Bean 和定义 Bean:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

    <!--扫描指定的包和子包,找出能够注册为 Spring Bean 的类-->
    <context:component-scan base-package="com.hundsun.idol"/>

</beans>

3.1 为自动检测标注 Bean

默认情况下,<context:component-scan> 查找使用构造型注解所标注的类,这些特殊的注解如下:

  • @Component:通用的构造型注解,标识为 Spring 组件
  • @Controller:标识为 Spring MVC controller
  • @Repository:标识为数据仓库
  • @Service:标识为服务
  • 使用 @Component 标注的任意自定义注解
@Component // 默认ID为无限定类名
public class Piano implements Instrument {

}

@Component("kenny") // ID显示命名为:kenny
public class Instrumentalist implements Performer {

}

3.2 过滤组件扫描

  通过为 <context:component-scan> 配置 <context:include-filter> 和 <context:exclude-fliter> 子元素,可以随意调整扫描行为。

  • annotation:过滤器扫描使用指定注解所标注的类,通过 expression 属性指定要扫描的注解
  • assignable:过滤器扫描派生于 expression 属性指定类型的类
  • aspectj:过滤器扫描与 expression 属性所指定的 AspectJ 表达式所匹配的类
  • custom:使用自定义的 TypeFilter 实现类,该类由 expression 属性指定
  • regex:过滤器扫描类的名称与 expression 属性指定的正则表达式匹配的类
<context:component-scan base-package="com.hundsun.idol">
        <!--自动注册所有Instrument的实现类-->
        <context:include-filter type="assignable" expression="com.hundsun.idol.Instrument"/>
</context:component-scan>

4 使用 Spring 基于 Java 的配置

--EOF--

时间: 2024-10-12 12:15:10

<Spring实战>3:最小化Spring XML配置的相关文章

Spring实战3-最小化Spring XML配置

自动装配Bean属性 一共有四种自动装配类型(需要在Bean配置里添加autowire属性来指定用哪种类型) byName-把与Bean的属性具有相同名字或ID的其他Bean自动装配到Bean的对应属性中.如果没有跟属性的名字相匹配的Bean,则该属性不进行装配.--实际上对比的是Bean ID. byType-把与Bean的属性具有相同类型的其他Bean自动装配到Bean的对应属性.如果没有跟属性的类型相匹配的Bean,则该属性不被装配.局限性:如果Spring找到多个Bean,它们的类型都与

Spring IOC的初始化过程——基于XML配置(一)

前言:在面试过程中,Spring IOC的初始化过程,基本上属于必答题,笔者的亲身经历.因此本文基于Spring的源码对其IOC的初始化过程进行总结. 注:spring版本为4.3.0. 1.调试前准备 在spring源码中,添加如下内容(有关spring源码如何导入idea,请查询相关资料): 说明: ①User为简单bean,含有name和gender两个属性. ②User.xml为spring配置文件,仅仅对User进行简单的配置. ③SpringIoCDebug为测试类. 先看执行结果:

centos6.x最小化安装后配置网络

centos6.x最小化安装后配置网络 最小化安装CentOS6.x后,试着用yum安装几个软件,发现网卡都没配置! 解决办法: 编辑配置文件: vi /etc/sysconfig/network-script/ifcfg-eth0 修改下列几项配置: NM_CONTROLLED=no ONBOOT=yes BOOTPROTO=dhcp 修改完保存,然后: service network start 启动网卡,yum能用了!

Linux最小化安装网络配置

Linux最小化安装网络配置 配置网络ip vi /etc/sysconfig/network-scripts/ifcfg-ens33(将选中的部分改为yes) 保存退出并重启网络 service network restart 3.最小化安装没有ifconfig要用ip addr查看ip地址 ssh连接到MobaXterm 下载dokuwiki前安装必要工具 安装vimyum -y install vim 安装wgetyum -y install wget 安装net-tools(已安装过)

[Spring]04_最小化Spring XML配置

4.1 自动装配 Bean Spring 装配 bean 时,有时非常明确,就是需要将某个 bean 的引用装配给指定属性. 例如,若应用上下文中只有一个 javax.sql.DataSource 类型的 bean,那么任意一个依赖 DataSource 的其他 bean 就是需要这个 DataSource Bean. 为了应对这种明确的装配场景,Spring提供了自动装配(autowiring). 4.1.1 四种类型的自动装配 Spring提供了4种自动装配策略 (1)byName——把与

spring实战六之使用基于java配置的Spring

之前接触的都是基于XML配置的Spring,Spring3.0开始可以几乎不使用XML而使用纯粹的java代码来配置Spring应用.使用基于java配置的Spring的步骤如下: 1. 创建基于java的配置. 配置极少量的XML来启用java配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/bea

Spring AMQP 源码分析 08 - XML 配置

### 准备 ## 目标 通过 XML 配置文件使用 Spring AMQP ## 前置知识 <Spring AMQP 源码分析 07 - MessageListenerAdapter> ## 相关资源 Sample code:<https://github.com/gordonklg/study>,rabbitmq module 源码版本:Spring AMQP 1.7.3.RELEASE ## 测试代码 gordon.study.rabbitmq.springamqp.XmlC

Spring Security应用开发(02)基于XML配置的用户登录

1.1. 基于XML配置的登录功能 经过一系列配置之后,可以使用Spring Security内置功能实现最基本的用户登录功能以及角色验证功能,这种内置的功能没有任何实用价值,仅仅用于了解Spring Security的工作方式. (1)配置web.xml. 主要是为Spring MVC和Spring Security提供一些入口,以便有机会进行Spring MVC以及Spring Security的初始化和过滤处理等工作. <servlet> <servlet-name>spri

【Spring六】JDBC编程之XML配置

jdbc编程最主要的就是要引入数据源,常见的有dbcp数据源,c3p0数据源等. 几个重要的类: JdbcTemplate,里面提供了dao的方法,需要提供数据源给他! JdbcDaoSupport RowMapper 说明: 无论采用什么样的方法必须把dataSource注入到JdbcTemplate里 1.继承JdbcDaoSupport(该类有JdbcTemplate) 2.继承JdbcTemplate 3.引入JdbcTemplate 1.xml配置: <beans xmlns="

Spring MVC 的 Java Config ( 非 XML ) 配置方式

索引: 开源Spring解决方案--lm.solution 参看代码 GitHub: solution/pom.xml web/pom.xml web.xml WebInitializer.java WebConfig.java RootConfig.java 一.引入必要类库 spring-context spring-context-support spring-webmvc:引入该包后,maven 会自动解析依赖,引入 spring-web 等包. 1.solution/pom.xml 1