一、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容器(二)的更多相关文章

  1. Spring学习笔记之 Spring IOC容器(二) 之注入参数值,自动组件扫描方式,控制Bean实例化方式,使用注解方式

     本节主要内容:    1. 给MessageBean注入参数值    2. 测试Spring自动组件扫描方式    3. 如何控制ExampleBean实例化方式    4. 使用注解方式重构Jdb ...

  2. Spring IOC(二)容器初始化

    本系列目录: Spring IOC(一)概览 Spring IOC(二)容器初始化 Spring IOC(三)依赖注入 Spring IOC(四)总结 目录 一.ApplicationContext接 ...

  3. Spring IOC容器的初始化-(二)BeanDefinition的载入和解析

    前言 1.在讲BeanDefinition的载入和解析之前,我们先来看看什么是BeanDefinition. Bean对象在Spring中是以BeanDefinition来描述的,也就是说在Sprin ...

  4. MyEclipse Spring 学习总结一 Spring IOC容器

    一.Spring IOC容器---- Spring AllicationContext容器 程序的结构如下: 1.首先在MyEclipse 创建创建Java Project 2.创建好后,添加spin ...

  5. Spring IOC容器基本原理

    2.2.1 IOC容器的概念IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化.定位.配置应用程序中的对象及建立这些对象间的依赖.应用程序无需直接在代码中new相关的对象,应用程序由IOC容器 ...

  6. Spring IOC 容器源码分析系列文章导读

    1. 简介 Spring 是一个轻量级的企业级应用开发框架,于 2004 年由 Rod Johnson 发布了 1.0 版本.经过十几年的迭代,现在的 Spring 框架已经非常成熟了.Spring ...

  7. Spring IOC容器启动流程源码解析(四)——初始化单实例bean阶段

    目录 1. 引言 2. 初始化bean的入口 3 尝试从当前容器及其父容器的缓存中获取bean 3.1 获取真正的beanName 3.2 尝试从当前容器的缓存中获取bean 3.3 从父容器中查找b ...

  8. Spring IOC容器在Web容器中是怎样启动的

    前言 我们一般都知道怎样使用spring来开发web应用后,但对spring的内部实现机制通常不是很明白.这里从源码角度分析下Spring是怎样启动的.在讲spring启动之前,我们先来看看一个web ...

  9. JavaEE互联网轻量级框架整合开发(书籍)阅读笔记(6):Spring IOC容器学习(概念、作用、Bean生命周期)

    一.IOC控制反转概念 控制反转(IOC)是一种通过描述(在Java中可以是XML或者是注解)并通过第三方去生产或获取特定对象的方式. 主动创建模式,责任在于开发者,而在被动模式下,责任归于Ioc容器 ...

  10. 深入理解Spring IoC容器和动态代理机制

    Deployment期间验证 实现一: <bean id="theTargetBean" class="..."/> <bean id=&qu ...

随机推荐

  1. 漫步Java------初识java

    一. Java语言概述 语言:是人与人之间用于沟通的一种方式. 例如:中国人与中国人用普通话沟通.而中国人要和英国人交流,就要学习英语. 计算机语言(编程语言): 人与计算机交流的方式.如果人要与计算 ...

  2. myql update from 语句

    (6)UPDATE 语句与 SELECT 语句中的 TOP 子句一起使用对来自表 authors 的前十个作者的 state 列进行更新 UPDATE authors SET state = 'ZZ' ...

  3. python3+requests:get/post请求

    1.get请求 (1)没有请求参数类型 response = requests.get(url='') print(response.text) (2)有请求参数的类型(键值对形式表示参数) resp ...

  4. JAVA的设计模式之装饰设计模式

    1.装饰设计模式 顾名思义,装饰模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例,关系图如下: 2.看这个图可能不容易理解,举两个 ...

  5. 2017第八届蓝桥杯C/C++ B组省赛-购物单

    标题: 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折 ...

  6. rtsp 学习之路一

    http://baijiahao.baidu.com/s?id=1587715130853990653&wfr=spider&for=pc https://www.cnblogs.co ...

  7. Spring Boot 揭秘与实战(六) 消息队列篇 - RabbitMQ

    文章目录 1. 什么是 RabitMQ 2. Spring Boot 整合 RabbitMQ 3. 实战演练4. 源代码 3.1. 一个简单的实战开始 3.1.1. Configuration 3.1 ...

  8. grep命令相关用法

    grep命令相关参数: -i:忽略大小写 --color:高亮显示匹配到的信息 -v:反向查找,没匹配到的行显示出来 -o:只显示被模式匹配到的串本身 正则表达式: .*:任意长度的任意字符,贪婪模式 ...

  9. gcc/g++多版本切换 (ubuntu18.04)

    使用Ubuntu18.04已经有一段时间了,在使用过程中经常需要处理不同软件的编译工作,但是这时候就遇到这样一个问题,那就是不同软件,甚至是同一个软件的不同版本都会使用不同版本的gcc/g++来进行编 ...

  10. ORA-00600: internal error code, arguments: [kole_t2u], [34]

    数据库版本10.2.0.5,Alert 日志存在ORA-600报错 ORA-00600: internal error code, arguments: [kole_t2u], [34], [] -- ...