6、Spring-XML配置
2019-09-18 本文已影响0人
唯老
一、概要
配置方式
Spring支持三种方式配置Bean,Spring1.0仅支持基于XML的配置,Spring2.0新增基于注解配置的支持,Spring3.0新增基于Java类配置的支持,Spring4.0则新增给予Groovy动态语言配置的支持。
- Explicit configuration in XML:显示的XML配置
- Explicit configuration in Java:显示的JavaConfig,基于java类配置
- Implicit bean discovery and automatic wiring:隐式的bean扫描,基于java注解配置,自动注入
- Explicit configuration in Groovy DSL:Groovy动态语言配置
在实际开发中前面三种方式都会用到,后面一种相对用的比较少,因为需要学习Groovy语言
使用原则
-
基于注解自动注入(优先使用)
优点:在class文件中,降低维护成本。不需要第三方解析工具,利用java反射机制。编辑期就可以检验正确性,提高开发效率。
缺点:如果需要对注解进行修改,那么要重新编译整个工程。Bean之间的关系不好把控。 -
Java 接口和类中配置实现配置(Spring Boot的推荐方式)
同隐式的bean扫描,基于注解 - XML配置(第三方框架,无法修改源代码的情况下)
优点:简单易懂,配置文件修改不需要重新编译,扩展起来相对容易,比较典型的应用场景就是第三方的库中,一般都采用此种配置方式
缺点:配置文件过多的时候难以管理
二、XML配置
使用 XML 装配 Bean 需要定义对应的 XML,这里需要引入对应的 XML 模式(XSD)文件,这些文件会定义配置 Spring Bean 的一些元素,当我们在 IDEA 中创建 XML 文件时,会有友好的提示
三、通过XML配置加载Bean
整体结构
<beans>
<bean id="" class="">
<property name="" value=""/>
</bean>
<alias alias="alias" name="alias" />
<import resource="xxx.xml" />
</beans>
配置文件
<!--配置bean,配置后该类由spring管理-->
<bean class="这个Bean的类"
name/id="Bean在容器里面的唯一名称"
scope="Bean的作用域范围"
lazy-init="是否为懒加载">
<!-- Constructor-arg方式给属性赋值写法一 -->
<constructor-arg type="int" value="1"/>
<!-- Constructor-arg方式给属性赋值写法二-->
<constructor-arg name="xx" value="2"/>
<!-- Constructor-arg方式给属性赋值写法三-->
<constructor-arg index="0" value="3"/>
<!-- Properties方式给属性赋值写法一-->
<property name="xx">
<ref bean="另外一个Bean的名字"/>
</property>
<!-- Properties方式给属性赋值写法二-->
<property name="xx" ref="另外一个Bean的名字"/>
<!-- Properties方式给属性赋值写法三-->
<property name="integerProperty" value="1"/>
</bean>
四、bean配置说明
id
- 说明
- Bean 的名称,在 IOC 容器中必须是唯一的 , 代码中通过BeanFactory获取JavaBean实例时需以此作为索引名称
- 命名必须以字母开头,可以使用字母、数字、连字符、下划线、句号、冒号、 /*
- 若id没有指定,Spring 自动将全限定名#{number}作为 Bean 的名字,com.wener.example.bean.User#0
- id 可以指定多个名字,名字之间可用逗号、分号、或空格分隔
- 栗子
// java 代码 public class User { private String name; private String password; }
<!-- xml配置 --> <bean id="user,userId" class="com.wener.example.bean.User"/>
class
- 说明
一个类的全限定名(类的完整路径) - 栗子
<!-- xml配置 --> <bean class="com.wener.example.bean.User"/>
lazy-init
- 说明
默认false,懒加载,让Spring容器在Bean首次用到时创建Bean实例,而不是在应用一启动就创建 - 栗子
<bean class="com.wener.example.bean.User" lazy-init="true"/>