Spring Bean配置细节author: 惠惠
## 字面值
可用字符串表示的值,可以通过元素标签或value属性进行注入。
如果字面值包含特殊字符,可以使用
使用utility schema定义集合
使用基本的集合标签定义集合时,不能将集合作为独立的Bean定义,导致其他Bean无法引用该集合,所以无法在不同Bean之间共享集合。
可以使用util schema 里的集合标签定义独立的集合Bean需要注意的是,必须在根元素里添加util schema定义。
p命名空间
简化property的应用
<bean id="**" class="**">p:name="**"p:car-ref="**"
</bean>
autowire
可以使用autowire属性指定自动装配的方式。
byName根据bean的名字和当前bean的setter风格属性名进行自动装配,若有匹配,进行自动装配,没有则不装配。
byType根据bean的属性的类型进行自动装配。若IOC容器中有1个以上的类型匹配的bean,则抛异常。
bean作用域
singeton: 默认值,(容器初始化时创建bean实例),在整个容器的生命周期内只创建以一个bean。
property: 原型值,(容器初始化时不创建bean实例),而且在每次请求时都创建一个新的bean实例,并返回。
使用外部属性文件
配置bean时,在bean配置中混入系统部署的细节信息(文件路径,数据源配置信息),部署细节要和bean配置相分离。
spring提供PropertyPlaceholderConfigurer的BeanFactory后置处理器,将用户bean配置到外移的属性文件。 var的变量。Spring使用 {var}的变量。Spring使用(propName),实现属性相互吸引。
SpEL
Spring表达式语言,支持运行时查询和操作对象图的强大表达式语言
类似于EL:SpEL使用#{…}作为定界符
- 通过bean的id对bean进行引用
- 调用方法以及引用对象的属性
- 计算表达式的值
- 正则表达式的匹配
bean生命周期方法
Spring IOC容器对bean的生命周期进行管理的过程:
- 通过构造器或工厂方法创建bean的实例
- 为bean的属性设置值和对其他bean的引用
- bean可以使用了
- 当容器关闭时,调用bean的销毁方法
在bean的申明中,设置init-method和destroy-method属性,为bean指定从初始化和销毁方法。
实现BeanPostProcessor接口,并具体提供
Object postProcessBeforeInitialization(Object bean, String beanName): init-method之前被调用
Object postProcessAfterInitialization(Object bean, String beanName): destroy-method之前被调用
bean:bean实例本身
beanName:IOC容器配置的bean的名字
返回值:实际上返回给用户的那个bean,可以在以上两方法修改返回bean,或返回一个新bean
不需要配置id,IOC容器自动识别是一个BeanPostProcessor
静态工厂方法配置
直接调用某一个类的静态方法可以返回bean的实例
class属性:指向工厂方法的全类名
factory-method:指向工厂方法的名字
constructor-arg:工厂方法需要配置参数,则使用constructor-arg
单例factory,需要指定factory-bean
factorybean 需要实现
通过factoryBean配置bean实例,class指向factorybean的全类名,peoperty可以配置factorybean的属性,但是返回的是factorybean中getObject()方法返回的实例
注解
Spring可以从classpath下自动扫描,侦测和实例化具有特定注解的组件
- @component:基本注解,标识了一个受Spring管理的组件
- @Repository:标识持久层组件
- @Service:标识服务层组件
- @Controller:标识表现层组件
Spring默认命名策略:使用非限定类名,第一个字母小写,也可以在注解中通过value属性标识组件名称。
在classpath中扫描组件
组件类使用特定的注解,需要在Spring的配置文件声明
- base-package: 属性指定需要扫描的基类包,Spring容器将会扫描这个基类包及其子包中的所有类
当需要扫描多个包时,可以使用逗号分隔
-如果仅需要扫描特定的类而非基包下所有的包,可以使用resource-pattern属性过滤特定的类,示例:
组件装配
元素会自动注册AutowiredAnnotationBeanPostProcessor实例,该实例可以自动装配具有@Autowired和@Resource、@Inject注解的属性。
@Autowired自动装配bean
@Autowired注解自动装配具有兼容类型的单个bean属性
- 构造器,普通字段(即使非public),一切具有参数的方法都可以应用@Autowired注解
- 默认情况下,所有使用@Autowired注解的属性都需要被设置,当Spring找不到匹配的Bean装配属性时,会抛出异常。若某一属性允许不被设置(没有被bean注入IOC),可以设置@Autowired注解的required属性为false
- 默认情况下,当IOC容器里存在多个类型兼容的Bean,通过类型的自动装配将无法工作,此时可以在@Qualifier注解提供Bean的名称,Spring允许对方法的入参标注@Qualifier已指定注入Bean的名称
- @Autowired注解也可以应用在数组类型的属性上,此时Spring将会把所有匹配的Bean进行自动装配
- Autowired注解可以应用在集合属性上,此时Spring读取该集合的类型信息,自动装配所有与之兼容的Bean
- Aurowired注解用在java.util.Map上,Map的键值为String,那么Spring将自动匹配与之兼容的Bean
@Resource和@Inject和@Autowired功能相类似建议使用@Autowired
Spring Bean配置细节author: 惠惠相关推荐
- Spring bean配置的六种方式
本文将详细介绍Spring Bean配置的六种不同方式的特点与使用条件. 一,Spring 的配置文件概述 其实,Spring的配置文件是Spring容器对Bean进行生产以及关系注入的图纸,他是Sp ...
- Spring bean配置继承
在 Spring,继承是用为支持bean设置一个 bean 来分享共同的值,属性或配置. 一个子 bean 或继承的bean可以继承其父 bean 的配置,属性和一些属性.另外,子 Bean 允许覆盖 ...
- spring bean配置_在运行时交换出Spring Bean配置
spring bean配置 如今,大多数Java开发人员都定期与Spring打交道,而我们当中的许多人都已经熟悉了它的功能和局限性. 最近,我遇到了一个我从未遇到过的问题:引入了基于运行时引入的配置来 ...
- 在运行时交换出Spring Bean配置
如今,大多数Java开发人员都定期与Spring打交道,而我们当中的许多人已经熟悉了Spring的功能和局限性. 最近,我遇到了一个我从未遇到过的问题:引入了基于运行时引入的配置来重新连接Bean内部 ...
- Spring Bean 配置相关的注意事项
数据访问注意事项 本部分介绍与访问事务中的数据的 Spring Bean 配置相关的注意事项. Spring Framework 实际上使用一个容器管理层(在 J2EE 环境中委托给基础 J2EE 运 ...
- Spring Bean配置方式之一:Java配置
简介: Spring bean 是使用传统的 XML 方法配置的.在这篇文章中,您将学习使用基于纯 Java 的配置而非 XML 来编写 Spring bean 并配置它们.本文将介绍可用来配置 be ...
- Spring Bean配置默认为单实例 pring Bean生命周期
Bean默认的是单例的. 如果不想单例需要如下配置: <bean id="user" class="..." scope="singleton& ...
- Spring Bean配置依赖注入
Bean配置 属性 值 注释 id 自自定义,一般为类名 Bean ID name 自自定义,一般为类名,与id作用相同 Bean别名,多个别名逗号分隔 class 指定的类路径,com.xx.xx. ...
- spring bean创建细节
1) 对象创建: 单例/多例 scope="singleton", 默认值,即默认是单例[service/dao/工具类] scope="prototype ...
最新文章
- Shell脚本头定义
- Git操作之配置别名
- 新西兰激光事故5年增加130% 官员警告危害航空安全
- 关于大数据与机器学习,小白和牛人之间15个典型问答精华整理上篇
- win7+ubuntu19.10使用easybcd安装
- 在程序设计中使用Interface
- 【STM32】关闭JTAG接口,引脚设置推挽输出
- Python练习-装饰器版-为什么我的用户总被锁定
- 如何填满word页面_Word应用分隔符的使用
- C++中result_of用法
- 在windows下安装Linux双系统共存不需要改引导(U盘安装版本)
- 订购国际机票的常用指令
- 适合新手——MySQL中基于SQL语言增删改查等基础的练习大汇总
- matlab怎么画lnx图像,inx图像(lnx的图像函数)
- Alibaba珍藏版mybatis手写文档,值得一读!
- word文档通配符换行_Word指定位置批量插入表格,别人花一天搞不出来,我只用了10秒...
- Android手机游戏浅析
- 推荐一款优秀的硬盘空间管理工具软件-TreeSize Free
- 软件智能:aaas系统对AI的诠释-AI的可能的三个取向和必然的一个成果(演绎逻辑-必然的推理-的两个独立性:推论和定论)
- Android齐步走-2(2016-7-1)
热门文章
- IE设置浏览器不缓存页面
- oracle池式连接超时,oracle连接由于防火墙设置导致超时的问题
- mysql execute 存储过程_mysql之存储过程
- 汉字转拼音,可识别多音字,可返回首字母,大小写等
- 一个华为离职者的离职感言,干货满满
- 基于TensorFlow的CNN模型——猫狗分类识别器(五)之训练和评估CNN模型
- 中国邮政邮科院 X StarRocks:统一OLAP平台,大幅降低运维成本
- 蜜罐技术怎样区分正常用户和黑客
- gps经纬度坐标 c语言,初学者: gps:GPRMC 经纬度问题
- SpringBoot整合FFmpeg进行视频分片上传(Linux)