6、Spring-XML配置

2019-09-18  本文已影响0人  唯老

一、概要

配置方式

Spring支持三种方式配置Bean,Spring1.0仅支持基于XML的配置,Spring2.0新增基于注解配置的支持,Spring3.0新增基于Java类配置的支持,Spring4.0则新增给予Groovy动态语言配置的支持。

  1. Explicit configuration in XML:显示的XML配置
  2. Explicit configuration in Java:显示的JavaConfig,基于java类配置
  3. Implicit bean discovery and automatic wiring:隐式的bean扫描,基于java注解配置,自动注入
  4. Explicit configuration in Groovy DSL:Groovy动态语言配置
    在实际开发中前面三种方式都会用到,后面一种相对用的比较少,因为需要学习Groovy语言

使用原则

  1. 基于注解自动注入(优先使用)
    优点:在class文件中,降低维护成本。不需要第三方解析工具,利用java反射机制。编辑期就可以检验正确性,提高开发效率。
    缺点:如果需要对注解进行修改,那么要重新编译整个工程。Bean之间的关系不好把控。
  2. Java 接口和类中配置实现配置(Spring Boot的推荐方式)
    同隐式的bean扫描,基于注解
  3. 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

  1. 说明
    • Bean 的名称,在 IOC 容器中必须是唯一的 , 代码中通过BeanFactory获取JavaBean实例时需以此作为索引名称
    • 命名必须以字母开头,可以使用字母、数字、连字符、下划线、句号、冒号、 /*
    • 若id没有指定,Spring 自动将全限定名#{number}作为 Bean 的名字,com.wener.example.bean.User#0
    • id 可以指定多个名字,名字之间可用逗号、分号、或空格分隔
  2. 栗子
    // java 代码
    public class User {
        private String name;
        private  String password;
    }
    
    <!-- xml配置 -->
     <bean id="user,userId" class="com.wener.example.bean.User"/>
    

class

  1. 说明
    一个类的全限定名(类的完整路径)
  2. 栗子
    <!-- xml配置 -->
     <bean class="com.wener.example.bean.User"/>
    

lazy-init

  1. 说明
    默认false,懒加载,让Spring容器在Bean首次用到时创建Bean实例,而不是在应用一启动就创建
  2. 栗子
     <bean class="com.wener.example.bean.User" lazy-init="true"/>
    
上一篇 下一篇

猜你喜欢

热点阅读