网站建设合作协议模板,深圳app开发公司大概,网站开发 图片存放,统计局门户网站建设背景Spring之Bean的配置与实例 一、Bean的基础配置1. Bean基础配置【重点】配置说明代码演示运行结果 2. Bean别名配置配置说明代码演示打印结果 3. Bean作用范围配置【重点】配置说明代码演示打印结果 二、Bean的实例化1. Bean是如何创建的2. 实例化Bean的三种方式2.1 构造方法方式… Spring之Bean的配置与实例 一、Bean的基础配置1. Bean基础配置【重点】配置说明代码演示运行结果 2. Bean别名配置配置说明代码演示打印结果 3. Bean作用范围配置【重点】配置说明代码演示打印结果 二、Bean的实例化1. Bean是如何创建的2. 实例化Bean的三种方式2.1 构造方法方式【重点】2.2 静态工厂方式2.3 实例工厂方式2.4 实现FactoryBean\T方式 三、Bean的生命周期1. 生命周期相关概念介绍2. 代码演示2.1 Bean生命周期控制2.2 Bean生命周期控制 3. Bean销毁时机 一、Bean的基础配置
问题导入
问题1在bean标签上如何配置别名
问题2Bean的默认作用范围是什么如何修改
1. Bean基础配置【重点】
配置说明 代码演示 见《IOC入门案例》applicationContext.xml配置 运行结果 见《IOC入门案例》运行结果 2. Bean别名配置
配置说明 代码演示 打印结果 3. Bean作用范围配置【重点】
配置说明 扩展scope的取值不仅仅只有singleton和prototype还有request、session、application、websocket 表示创建出的对象放置在web容器(tomcat)对应的位置。比如request表示保存到request域中。 代码演示 打印结果 最后给大家说明一下在我们的实际开发当中绝大部分的Bean是单例的也就是说绝大部分Bean不需要配置scope属性。 二、Bean的实例化
问题导入
Bean的实例化方式有几种
1. Bean是如何创建的
bean本质上就是对象创建bean使用构造方法完成
2. 实例化Bean的三种方式
2.1 构造方法方式【重点】
BookDaoImpl实现类
public class BookDaoImpl implements BookDao {public BookDaoImpl() {System.out.println(book dao constructor is running ....);}public void save() {System.out.println(book dao save ...);}
}applicationContext.xml配置
!--方式一构造方法实例化bean--
bean idbookDao classcom.itheima.dao.impl.BookDaoImpl/AppForInstanceBook测试类
public class AppForInstanceBook {public static void main(String[] args) {ApplicationContext ctx new ClassPathXmlApplicationContext(applicationContext.xml);BookDao bookDao (BookDao) ctx.getBean(bookDao);bookDao.save();}
}运行结果 注意无参构造方法如果不存在将抛出异常BeanCreationException
2.2 静态工厂方式
OrderDao接口和OrderDaoImpl实现类
public interface OrderDao {public void save();
}
public class OrderDaoImpl implements OrderDao {public void save() {System.out.println(order dao save ...);}
}OrderDaoFatory工厂类
//静态工厂创建对象
public class OrderDaoFactory {public static OrderDao getOrderDao(){System.out.println(factory setup....);return new OrderDaoImpl();}
}applicationContext.xml配置
!--方式二使用静态工厂实例化bean--
bean idorderDao classcom.itheima.factory.OrderDaoFactory factory-methodgetOrderDao/AppForInstanceOrder测试类
public class AppForInstanceOrder {public static void main(String[] args) {ApplicationContext ctx new ClassPathXmlApplicationContext(applicationContext.xml);OrderDao orderDao (OrderDao) ctx.getBean(orderDao);orderDao.save();}
}运行结果 2.3 实例工厂方式
UserDao接口和UserDaoImpl实现类
public interface UserDao {public void save();
}
public class UserDaoImpl implements UserDao {public void save() {System.out.println(user dao save ...);}
}UserDaoFactory工厂类
//实例工厂创建对象
public class UserDaoFactory {public UserDao getUserDao(){return new UserDaoImpl();}
}applicationContext.xml配置
!--方式三使用实例工厂实例化bean--
bean iduserFactory classcom.itheima.factory.UserDaoFactory/bean iduserDao factory-methodgetUserDao factory-beanuserFactory/AppForInstanceUser测试类
public class AppForInstanceUser {public static void main(String[] args) {// //创建实例工厂对象// UserDaoFactory userDaoFactory new UserDaoFactory();// //通过实例工厂对象创建对象// UserDao userDao userDaoFactory.getUserDao();// userDao.save();ApplicationContext ctx new ClassPathXmlApplicationContext(applicationContext.xml);UserDao userDao (UserDao) ctx.getBean(userDao);userDao.save();}
}运行结果 2.4 实现FactoryBeanT方式
定义UserDaoFactoryBean实现FactoryBeanUserDao UserDaoFactoryBean中实例化什么类型的对象泛型就是该类型。 //FactoryBean创建对象
public class UserDaoFactoryBean implements FactoryBeanUserDao {//代替原始实例工厂中创建对象的方法public UserDao getObject() throws Exception {return new UserDaoImpl();}public Class? getObjectType() {return UserDao.class;}
}applicationContext.xml配置
!--方式四使用FactoryBean实例化bean--
bean iduserDao classcom.itheima.factory.UserDaoFactoryBean/使用之前的AppForInstanceUser测试类去运行看结果就行了。注意配置文件中iduserDao是否重复。 三、Bean的生命周期
问题导入
问题1多例的Bean能够配置并执行销毁的方法
问题2如何做才执行Bean销毁的方法
1. 生命周期相关概念介绍
生命周期从创建到消亡的完整过程bean生命周期bean从创建到销毁的整体过程bean生命周期控制在bean创建后到销毁前做一些事情
2. 代码演示
2.1 Bean生命周期控制
提供生命周期控制方法
public class BookDaoImpl implements BookDao {public void save() {System.out.println(book dao save ...);}//表示bean初始化对应的操作public void init(){System.out.println(init...);}//表示bean销毁前对应的操作public void destory(){System.out.println(destory...);}
}applicationContext.xml配置
!--init-method设置bean初始化生命周期回调函数,此处填写init方法名--
!--destroy-method设置bean销毁生命周期回调函数仅适用于单例对象此处填写destory方法名--
bean idbookDao classcom.itheima.dao.impl.BookDaoImpl init-methodinit destroy-methoddestory/测试类
public class AppForLifeCycle {public static void main( String[] args ) {//此处需要使用实现类类型接口类型没有close方法ClassPathXmlApplicationContext ctx new ClassPathXmlApplicationContext(applicationContext.xml);BookDao bookDao (BookDao) ctx.getBean(bookDao);bookDao.save();//关闭容器执行销毁的方法ctx.close();}
}2.2 Bean生命周期控制
实现InitializingBean, DisposableBean接口
public class BookServiceImpl implements BookService, InitializingBean, DisposableBean {private BookDao bookDao;public void setBookDao(BookDao bookDao) {System.out.println(set .....);this.bookDao bookDao;}public void save() {System.out.println(book service save ...);bookDao.save();}public void destroy() throws Exception {System.out.println(service destroy);}public void afterPropertiesSet() throws Exception {System.out.println(service init);}
}测试类代码同《3.2.1 Bean生命周期控制》中的测试代码 3. Bean销毁时机
容器关闭前触发bean的销毁关闭容器方式 手工关闭容器 ConfigurableApplicationContext接口close()操作注册关闭钩子在虚拟机退出前先关闭容器再退出虚拟机 ConfigurableApplicationContext接口registerShutdownHook()操作
public class AppForLifeCycle {public static void main( String[] args ) {//此处需要使用实现类类型接口类型没有close方法ClassPathXmlApplicationContext ctx new ClassPathXmlApplicationContext(applicationContext.xml);BookDao bookDao (BookDao) ctx.getBean(bookDao);bookDao.save();//注册关闭钩子函数在虚拟机退出之前回调此函数关闭容器ctx.registerShutdownHook();//关闭容器//ctx.close();}
}