Spring - 关于beans、context的XML配置

前言

关于XML的IoC和依赖注入已经有所了解
虽然Spring可以通过注解、Java配置类完全摆脱XML配置文件,但还是需要了解一下


Spring XML文件

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    https://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

我们知道,所有的标签限制都是由约束空间决定的

beans约束空间:

在这里插入图片描述

context约束空间:

在这里插入图片描述

aop约束空间:
在这里插入图片描述

spring有很多内容:
在这里插入图片描述

很多都有对应的约束,如mvc也有很多约束,这些约束都是对应Spring中的一些配置,就不展开了,到用到时再去了解


Beans

<beans>是Spring xml配置文件的根标签

有这些属性:

在这里插入图片描述

xml开头的不需要了解,都是xml配置文件相关的内容
需要注意的是:

  • default-autowire:自动装配配置,取值为no/default/byName/byType/constructor/,默认为no。控制全体bean采用哪种自动装配方法
    可以看Spring - 依赖注入(DI)解析了解这些自动装配方式

  • default-autowire-candidates:对一批Bean进行限制,这批Bean可以自动装配,其他不匹配的排除自动装配之外,可以使用模式字符串,如default-autowire-candidates=“*abc”,所有id不是abc结尾的bean不自动装配
    可以有多个模式字符串

在这里插入图片描述在这里插入图片描述

不匹配ss结尾,注入失败

  • default-destroy-method: 指定管理的bean的销毁方法
  • default-init-method: 指定管理的bean的初始化方法
  • default-lazy-init: 值指定为true/false 默认是false,用于设置<bean>延迟初始化,也就是到使用时才实例化
  • default-merge:指定<beans>元素下配置的所有bean默认的merge行为,即bean在继承关系时在子类中合并父类的值
  • profile:在嵌套的<beans>中指定不同的环境的配置参数,可以在配置类中设置profile.default,profile.active切换不同环境的配置,或使用@Profile,@ActiveProfiles指定配置

在一个xml中配置多个beans
在这里插入图片描述
激活相应的beans
如果是web项目,就在web.xml中设置:

<context-param>
	<param-name>spring.profiles.active</param-name>
    <param-value>dev</param-value>
</context-param>

如果是Java配置类、测试类:

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();

context.getEnvironment().setActiveProfiles("dev");

当然,关于这种不同配置环境,SpringBoot的yml文件更加的方便


Beans约束空间属性

在这里插入图片描述

  • bean标签:表示由Spring容器接管的实体类

属性很多:
在这里插入图片描述
但和beans有很多相同的,常用的:

  1. id:唯一标识一个bean
  2. class:表示这个bean对应的Java类
  3. name:和id一样,id取名更严格,要符合xml的标准,name可以随便取名,当id,name 都没有时,这个bean的name为完整的class
  4. abstract:表示这个bean为抽象类,不实例化,和Java类一样,抽象bean需要被继承使用,配合parent标签,当设置了parent属性时,class属性失效
    <bean id="test" abstract="true"></bean>
    <bean id="testSon" parent="test"/>

testSon就可以继承test的属性,当然这两个bean表示的类不一定要是继承关系,这个只是用于属性数据的继承

  1. autowire:表示该bean会自动装配,和beans一样有5种类型
  2. autowire-candidate:表示该bean在容器自动装配查找bean时是否被识别,true就识别,false就不识别,就算设置了这个属性也可以自己设置autowire自动装配
  3. lazy-init:设置懒加载,为true即当使用到该bean时再实例化

bean还有子标签
在这里插入图片描述

property表示该bean的成员属性,如果是基本类型、String,就通过value赋值,是引用类型通过ref="beanId"找到外部的bean,是Setter注入
constructor-arg和property一样,不过是构造器注入

spring中bean标签的属性、子元素配置详解

  • alias:别名
    一个bean除了用id,name取名,还可以使用alias取名
    在这里插入图片描述
    这样person有3个名字了(不限制名字的个数)

  • import:引入外部资源
    只有一个属性resource,外部资源地址,可以classpath,也可以直接写地址

<import resource="classpath:application.xml"/>

import导入的外部资源,会使得这两个xml合并

  • description:描述标签

context约束空间属性

在这里插入图片描述

context也是Spring的核心之一,一般导包都会有org.springframework:spring-context:5.2.2.RELEASE这个包,这里的标签即一些和它相关
在这里插入图片描述

想要有这些标签,需要在beans引入约束:

 xmlns:context="http://www.springframework.org/schema/context"
 xsi:schemaLocation="
http://www.springframework.org/schema/context 
    https://www.springframework.org/schema/context/spring-context.xsd"
  • context:annotation-config:注解相关

实际上,如果我们想使用注解,都是需要在xml中配置相关的bean,注册对应的AnnotationBeanPostProcessor,有四个,他们会扫描Spring容器中的bean,找到拥有相对应的注解的bean进行处理操作

AutowiredAnnotationBeanPostProcessor,@Autowired注解

CommonAnnotationBeanPostProcessor,@ Resource 、@ PostConstruct、@
PreDestroy等注解

PersistenceAnnotationBeanPostProcessor,@PersistenceContext注解

RequiredAnnotationBeanPostProcessor,@Required的注解

需要配置,注解才能生效

 <bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/>

当然,Spring提供了简便方式:context:annotation-config标签,当XML中开启了该标签,就会自动接管这四个AnnotationBeanPostProcessor

  <context:annotation-config/>
  • context:component-scan :扫描对应包下的标注了bean组件注解的类,由Spring接管这些类

@Service告诉spring容器,这是一个Service类,标识服务层的Bean组件
@Autowried注解告诉spring,这个字段需要自动注入
@Scope指定此spring bean的scope是单例
@Repository注解指定此类是一个容器类,是DAO层类的实现。标识持久层Bean组件
@Componet:基本注解,标识一个受Spring管理的Bean组件
@Controller:标识控制层Bean组件

<context:component-scan base-package="pojo.bytype"/>

即扫描pojo.bytype包下所有类,如果有以上的注解,即根据注解操作

在这里插入图片描述
context:component-scan隐式实现了context:annotation-config

  • context:spring-configured

Spring 可以为IOC容器里的bean进行依赖注入,但如果某些类,没有配置在IOC里,通过这个标签,依然可以autowire注入对象,主要是配合Java配置@Configuration,可以在官网 - context:spring-configured中找到

<context:spring-configured/>主要是通过Spring管理AnnotationBeanConfigurerAspect切面,具体的工作由该切面完成

  • context:load-time-weaver:ApplicationContext中的任何Bean可能实现LoadTimeWearveAware,从而接受load-time weaver 实例的引用,主要是与Spring JPA的使用
  • context:mbean-export:Spring通过annotation注解注册MBean到JMX实现监控java运行状态
  • context:property-override:自动地用properties文件中定义的属性覆盖spring配置文件中同名的属性值
<context:property-override location="url"/>
  • context:property-placeholder :与上面类似

总结

Spring有很多模块,配置对应模块有相对应的约束空间,所以,想要深入了解很难,现在仅了解这些常用模块beans、context的常用标签

希望,在未来继续深入理解

学海无涯苦作舟

都看到这了,点个赞呗(^_−)☆

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值