Spring-4-Bean的生命周期,应用外部文件,自动装配及SpEL表达式

bean的生命周期

bean的创建与销毁

自定义生命周期的方法:
初始化方法: init-method=""
销毁方法: init-method=""
ioc容器中注册的bean:
1), 单例bean, 容器启动的时候就会创建好, 容器关闭也会销毁创建的bean
构造器------>初始化方法------>容器关闭(对象销毁)
2), 多实例bean, 获取的时候才创建
获取bean(构造器---->初始化方法)------>容器关闭不会销毁bean

public class Book {


	private String bookName;
	private String author;
	public Book() {
		System.out.println("Book被创建");
	}
	
	public void myInit() {
		System.out.println("这是book的初始化方法...");
	}
	
	public void myDestory() {
		System.out.println("这是book的销毁方法....");
	}
	
	<bean id="book01" class="com.xian.bean.Book"
		destroy-method="myDestory" init-method="myInit" scope="singleton"
	></bean>
bean的后置处理器

spring有一个接口: BeanPostProcessor
后置处理器:可以在bean的初始化前后调用方法;
后置处理器生命周期:
(容器启动)构造器------>后置处理器(before)------>初始化方法------>后置处理器(after)------>容器关闭(对象销毁)

无论bean是否有初始化方法, 后置处理器依然会工作:(容器启动)构造器------>后置处理器(before)------>后置处理器(after)------>容器关闭(对象销毁)

public class MyBeanPostPeocessor implements BeanPostProcessor {

	
	/**
	 * 初始化之前调用
	 */
	@Override
	public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
		System.out.println("[" + beanName + "] bean将要调用初始化方法了...");
		//默认反回传入的bean;
		return BeanPostProcessor.super.postProcessBeforeInitialization(bean, beanName);
	}
	/**
	 * 初始化之后调用
	 * beanName: xml中配置的id
	 */
	@Override
	public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
		System.out.println("[" + beanName + "] bean初始化方法调用完了了...");
		return BeanPostProcessor.super.postProcessAfterInitialization(bean, beanName);
	}
}

xml:  <bean id="myBeanPostPeocessor" class="com.xian.bean.MyBeanPostPeocessor"></bean>

引用外部文件

	<!-- 引用外部属性文件 依赖context名称空间
			classpath:, 表示引用类路径下的一个资源 -->
	<context:property-placeholder location="classpath:conf_2/dbconfig.properties"/>
数据库连接池作为单实例是最好的
	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
		<!-- username是Spring的key中的一个关键字, 为了防止冲突,可以加一个前缀 -->
		<property name="user" value="${jdbc.username}"></property>
		<property name="password" value="${jdbc.password}"></property>
		<property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
		<property name="driverClass" value="${jdbc.driverClass}"></property>
	</bean>

自动装配

自动赋值(自动装配):
autowire=“default”: 不自动装配
autowire=“byType”: private Car car;
以属性的类型作为查找依据, 找到需要的组件. = ioc.getBean(Car.class);
匹配不唯一, 则报错. 没有匹配的bean, 装配null.
autowire=“byName”: private Car car;
以属性名作为id去容器中找到一个组件,赋值. 如果匹配不上, 就是null
autowire=“constructor”:
按照构造器进行装配.

  1. 先按照类型进行装配, 没有直接为null
  2. 如果按照类型找到了多个, 按照参数名作为id继续装配, 找到就装配, 找不到就null.

SpEL

		<!-- 使用SpEL引用字面量,使用运算符:  #{} -->
		<property name="salary" value="#{12*12343}"></property>
		<!-- 引用其他bean的某个属性值 -->
		<property name="name" value="#{car.carName}"></property>
		<!-- 引用其他bean -->
		<property name="car" value="#{car}"></property>
	<!-- 调用静态方法:UUID.randomUUID().toString();
		#{T(全类名).静态方法 名(1,2)} -->
		<property name="email" value="#{T(java.util.UUID).randomUUID().toString()}"></property>
		<!-- 调用非静态方法:   对象.方法名 -->
		<property name="gender" value="#{car.getCarName()}"></property>
	</bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值