IOC
中Bean
生命周期
Bean
生命周期【重点】
- 通过构造器创建
bean
对象实例(无参构造) - 为
JavaBean
的属性设置值和对象其他bean
引用赋值(调用stter
方法) - 调用
bean
的初始化方法(需要进行配置初始化方法) bean
可以使用了(对象获取到了)- 当容器关闭时,调用
bean
的销毁方法(需要进行配置销毁的方法,注意是需要手动关闭容器,注意是ApplicationContext
中关闭方法,需要使用子类ClassPathXmlApplicationContext
中的close
方法)
javabean
类
public class Orders {
private String name;
public Orders() {
System.out.println("1.无构造器被执行了。。。");
}
public void setName(String name) {
this.name = name;
System.out.println("2.set方法被执行了");
}
public void initMethod(){
System.out.println("3.初始化方法被执行了");
}
public void destroyMethod(){
System.out.println("5.销毁方法被执行了");
}
}
xml
文件
<!--
Bean生命周期
-->
<bean id="order" class="com.haikang.bean.Orders" init-method="initMethod" destroy-method="destroyMethod">
<property name="name" value="电脑"/>
</bean>
test
方法
@Test
public void test(){
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("bean1.xml");
Orders order = context.getBean("order", Orders.class);
System.out.println("4.获取Bean对象了");
System.out.println(order);
// 注意是:要想销毁方法被执行,
// 必须自动手动关闭流,因为当容器销毁时,还没有来的及执行销毁方法,所以需要我们手动关闭
// ApplicationContext注意没有关闭方法,
// ApplicationContext的子类ClassPathXmlApplicationContext才有,需要向下强转
context.close();
}
Bean
生命周期加上Bean
后置处理器,Bean
生命周期有七步
前提是:定义一个类并实现BeanPostProcessor
接口
- 通过构造器创建
bean
对象实例(无参构造) - 为
JavaBean
的属性设置值和对象其他bean
引用赋值(调用stter
方法) - 把
bean
实例传递bean
后置处理器方法postProcessBeforeInitialization
- 调用
bean
的初始化方法(需要进行配置初始化方法) - 把
bean
实例传递给bean
后置处理器方法postProcessAfterInitalization
bean
可以使用了(对象获取到了)- 当容器关闭时,调用
bean
的销毁方法(需要进行配置销毁的方法)
添加后置处理器步骤:
添加后置处理器步骤:
- 定义一个类,并且实现接口
BeanPostProcessor
,重写类中的postProcessBeforeInitialization
方法和postProcessAfterInitalization
方法,并且在这个两个方法中添加相关业务逻辑 xml
文件中配置该为后置处理器类
- 测试
1. 创建一个类,实现接口BeanPostProcessor
package com.haikang.bean;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
/**
* @Author 海康
* @Version 1.0
*/
public class MyBeanPost implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("后置处理器初始化前。。。");
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("后置处理器初始化后。。。");
return bean;
}
}
- 在
xml
配置文件中,配置该类作为后置处理器
<!--配置后置处理器类-->
<bean id="myBeanPost" class="com.haikang.bean.MyBeanPost"/>
注意是:后置处理器只对同一个xml
文件中的javabean
起作用,如果与后置处理器的配置
不在同一个xml
文件则不作用,如下只有orders
类才起作用,因为在一个xml
文件中
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
Bean生命周期
-->
<bean id="order" class="com.haikang.bean.Orders" init-method="initMethod" destroy-method="destroyMethod">
<property name="name" value="电脑"/>
</bean>
<!--配置后置处理器类-->
<bean id="myBeanPost" class="com.haikang.bean.MyBeanPost"/>
</beans>
后置处理器
package com.haikang.bean;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
/**
* @Author 海康
* @Version 1.0
*/
public class MyBeanPost implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
System.out.println("后置处理器初始化前。。。");
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("后置处理器初始化后。。。");
return bean;
}
}
xml
文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--
Bean生命周期
-->
<bean id="order" class="com.haikang.bean.Orders" init-method="initMethod" destroy-method="destroyMethod">
<property name="name" value="电脑"/>
</bean>
<!--配置后置处理器类-->
<bean id="myBeanPost" class="com.haikang.bean.MyBeanPost"/>
</beans>
test
类
@Test
public void test(){
ClassPathXmlApplicationContext context =
new ClassPathXmlApplicationContext("bean1.xml");
Orders order = context.getBean("order", Orders.class);
System.out.println("4.获取Bean对象了");
System.out.println(order);
// 注意是:要想销毁方法被执行,
// 必须自动手动关闭流,因为当容器销毁时,还没有来的及执行销毁方法,所以需要我们手动关闭
// ApplicationContext注意没有关闭方法,
// ApplicationContext的子类ClassPathXmlApplicationContext才有,需要向下强转
context.close();
}
IOC
操作Bean
管理引入外部属性文件【用于数据库信息配置】
Spring
注入JDBCTemplate
对象
注入步骤
-
引入相关
jar
包druid
mysql-connector
spring-jdbc
spring-tx
spring-orm
包 -
创建
数据库连接池properties
文件 -
在
spring
配置文件中引入peroperties
文件和配置数据库池 -
配置
JdbcTemplate
对象,注入DataSource
对象属性 -
测试获取
JdbcTemplate
对象
第一步:引入相关jar
包
druid
,mysql-connector
srping-jdbc
spring-tx
spring-orm
第二步:创建数据库连接池properties
文件
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root
第三步:在spring
配置文件中引入peroperties
文件和配置数据库池
第四步:配置JdbcTemplate
对象,注入DataSource
对象属性
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
">
<!--引入context命名空间,引入jdbc.properties数据库连接池基本信息-->
<context:property-placeholder location="jdbc.properties"/>
<!--注入数据源对象属性DruidDataSource-->
<bean id="druidDataSource" class="com.alibaba.druid.pool.DruidDataSource">
<property name="driverClassName" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</bean>
<!--配置JdbcTemplate对象-->
<bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
<property name="dataSource" ref="druidDataSource"/>
</bean>
<!--开启组件扫描,使用注解注入-->
<context:component-scan base-package="com.haikang.jdbc.dao"/>
</beans>
第五步:测试获取JdbcTemplate
对象
public static void main(String[] args) {
ApplicationContext context = new
ClassPathXmlApplicationContext("JdbcTemplateBean.xml");
JdbcTemplate jdbcTemplate = context.getBean("jdbcTemplate", JdbcTemplate.class);
System.out.println(jdbcTemplate);
}