一、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>