spring-IOC容器(二)
一、bean配置里面使用外部属性文件:
<bean>中添加context Schema定义,Spring 提供了一个<property-placeholder>元素,可以在bean配置文件里使用形式为${var}的变量,property-placeholder从属性文件里加载属性,并使用这些属性替换变量。
Spring还允许在属性文件中使用${propName} ,以实现属性间的相互引用
<!-- 导入属性文件 -->
<context:property-placeholder location="classpath:db.properties"/> <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<!-- 使用外部化属性文件的属性 -->
<property name="user" value="${user}"></property>
<property name="password" value="${password}"></property>
<property name="driverClass" value="${driverclass}"></property>
<property name="jdbcUrl" value="${jdbcurl}"></property>
</bean>
db.properties文件:

二、SpEL(Spring表达式语言):
SpEL使用#{....}作为定界符,所有在大括号中的字符都被将被认为是SpEL,SpEL位bean的属性进行动态赋值提供了便利
<bean id="car" class="com.atguigu.spring.beans.spel.Car">
<property name="carName" value="bieke"></property>
<property name="carPrice" value="250000"></property>
<property name="carType" value="SUV"></property>
<!-- 使用SpEL引用类的静态属性 -->
<property name="tyrePerimiter" value="#{T(java.lang.Math).PI * 80}"></property>
</bean> <bean id="address" class="com.atguigu.spring.beans.spel.Address">
<property name="city" value="puyang"></property>
</bean> <bean id="person" class="com.atguigu.spring.beans.spel.Person">
<property name="name" value="lee"></property>
<property name="info" value="#{car.carPrice > 300000?'金领':'白领'}"></property>
<!-- 使用SpEL来引用其他的 bean -->
<property name="cars" value="#{car}"></property>
<!-- 使用SpEL来引用其他的 bean 的属性-->
<property name="home" value="#{address.city}"></property>
</bean>
三、bean的生命周期:
<!-- 在bean的声明里设置 init-method和destroy-method属性,为bean指定初始化和销毁的方法-->
<bean id="car" class="com.atguigu.spring.beans.cycle.Car"
init-method="init2" destroy-method="destroy">
<property name="brand" value="Audi"></property>
</bean> <!-- 实现MyBeanPostProcessor接口,并具体提供
Object postProcessBeforeInitialization(Object bean, String beanName):init-method之前被调用
Object postProcessAfterInitialization(Object bean, String beanName) :init-method之后被调用
在两个方法中,可以修改bean-->
<!-- 配置bean的后置处理器 :不需要配置id,IOC容器自动识别是一个 MyBeanPostProcessor-->
<bean class="com.atguigu.spring.beans.cycle.MyBeanPostProcessor"></bean>
spring-IOC容器(二)的更多相关文章
- Spring学习笔记之 Spring IOC容器(二) 之注入参数值,自动组件扫描方式,控制Bean实例化方式,使用注解方式
本节主要内容: 1. 给MessageBean注入参数值 2. 测试Spring自动组件扫描方式 3. 如何控制ExampleBean实例化方式 4. 使用注解方式重构Jdb ...
- Spring IOC(二)容器初始化
本系列目录: Spring IOC(一)概览 Spring IOC(二)容器初始化 Spring IOC(三)依赖注入 Spring IOC(四)总结 目录 一.ApplicationContext接 ...
- Spring IOC容器的初始化-(二)BeanDefinition的载入和解析
前言 1.在讲BeanDefinition的载入和解析之前,我们先来看看什么是BeanDefinition. Bean对象在Spring中是以BeanDefinition来描述的,也就是说在Sprin ...
- MyEclipse Spring 学习总结一 Spring IOC容器
一.Spring IOC容器---- Spring AllicationContext容器 程序的结构如下: 1.首先在MyEclipse 创建创建Java Project 2.创建好后,添加spin ...
- Spring IOC容器基本原理
2.2.1 IOC容器的概念IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化.定位.配置应用程序中的对象及建立这些对象间的依赖.应用程序无需直接在代码中new相关的对象,应用程序由IOC容器 ...
- Spring IOC 容器源码分析系列文章导读
1. 简介 Spring 是一个轻量级的企业级应用开发框架,于 2004 年由 Rod Johnson 发布了 1.0 版本.经过十几年的迭代,现在的 Spring 框架已经非常成熟了.Spring ...
- Spring IOC容器启动流程源码解析(四)——初始化单实例bean阶段
目录 1. 引言 2. 初始化bean的入口 3 尝试从当前容器及其父容器的缓存中获取bean 3.1 获取真正的beanName 3.2 尝试从当前容器的缓存中获取bean 3.3 从父容器中查找b ...
- Spring IOC容器在Web容器中是怎样启动的
前言 我们一般都知道怎样使用spring来开发web应用后,但对spring的内部实现机制通常不是很明白.这里从源码角度分析下Spring是怎样启动的.在讲spring启动之前,我们先来看看一个web ...
- JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(6):Spring IOC容器学习(概念、作用、Bean生命周期)
一.IOC控制反转概念 控制反转(IOC)是一种通过描述(在Java中可以是XML或者是注解)并通过第三方去生产或获取特定对象的方式. 主动创建模式,责任在于开发者,而在被动模式下,责任归于Ioc容器 ...
- 深入理解Spring IoC容器和动态代理机制
Deployment期间验证 实现一: <bean id="theTargetBean" class="..."/> <bean id=&qu ...
随机推荐
- SpringSecurity入门例子及遇到的问题解决
最近学习<Spring 实战>学习到了SpringSecurity,觉得书本上的例子过于复杂,而且不喜欢它基于java配置,更喜欢用xml文件进行配置 于是在极客学院网上学习,感觉挺不错的 ...
- IO-MYSQL的理解
数据库IO简介 IO有四种类型:连续读,随机读,随机写和连续写,连续读写的IO size通常比较大(128KB-1MB),主要衡量吞吐量,而随机读写的IO size比较小(小于8KB),主要衡量I ...
- python模块大全
python模块大全2018年01月25日 13:38:55 mcj1314bb 阅读数:3049 pymatgen multidict yarl regex gvar tifffile jupyte ...
- python day04 作业答案
1. 1) li=['alex','WuSir','ritian','barry','wenzhou'] print(len(li)) 2) li=['alex','WuSir','ritian',' ...
- JAVA_模糊查询_重点是concat关键字
SELECT * FROM user WHERE username LIKE concat('%',#{username},'%') concat : 类似+ ,拼接sql.sql语句中会将+ 重写. ...
- python的ConfigParser模块
前言 处理配置文件做增.删.改.查 操作. 配置文件的格式如下:“[ ]”包含的为 section,section 下面为类似于 key - value 的配置内容: configparser 默认支 ...
- 前端笔记 (3.JavaScript 1)
JavaScript 是属于网络的脚本语言! JavaScript 是一种轻量级的编程语言. JavaScript 是可插入 HTML 页面的编程代码. JavaScript 插入 HTML 页面后, ...
- 常用文本编辑器 editor 的常用插件 —— CopyEdit
1. CopyEdit http://www.conyedit.com/, 跨平台的文本编辑器插件: 监控粘贴板以及支持命令解析 其官网上有其动图演示:
- 【Leetcode】292. Nim Game
problem 292. Nim Game solution class Solution { public: bool canWinNim(int n) { ; } }; 来generalize一下 ...
- HPU第三次积分赛-D:Longest Increasing Subsequence(DP)
Longest Increasing Subsequence 描述 给出一组长度为n的序列,a1,a2,a3,a4...an, 求出这个序列长度为k的严格递增子序列的个数 输入 第一行输入T ...