当前位置: 首页 > news >正文

信阳做网站的公司厦门市房地产建设局网站

信阳做网站的公司,厦门市房地产建设局网站,wordpress配置首页,文章标题-栏目名称-网站名 dedeSpring之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>标签上如何配置别名?

问题2:Bean的默认作用范围是什么?如何修改?

1. Bean基础配置【重点】

配置说明

image-20210729183500978

代码演示

见《IOC入门案例》applicationContext.xml配置

运行结果

见《IOC入门案例》运行结果

2. Bean别名配置

配置说明

image-20210729183558051

代码演示

image-20210729191924626

打印结果

image-20210729191954870

3. Bean作用范围配置【重点】

配置说明

image-20210729183628138

扩展:scope的取值不仅仅只有singleton和prototype,还有request、session、application、websocket ,表示创建出的对象放置在web容器(tomcat)对应的位置。比如:request表示保存到request域中。

代码演示

image-20210729192420048

打印结果

image-20210729192730871

最后给大家说明一下:在我们的实际开发当中,绝大部分的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 id="bookDao" class="com.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();}
}
  • 运行结果

image-20210729194137151

注意:无参构造方法如果不存在,将抛出异常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 id="orderDao" class="com.itheima.factory.OrderDaoFactory" factory-method="getOrderDao"/>

image-20210729195248948

  • AppForInstanceOrder测试类
public class AppForInstanceOrder {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");OrderDao orderDao = (OrderDao) ctx.getBean("orderDao");orderDao.save();}
}
  • 运行结果

image-20210729195009198

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 id="userFactory" class="com.itheima.factory.UserDaoFactory"/><bean id="userDao" factory-method="getUserDao" factory-bean="userFactory"/>

image-20210729200203249

  • 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();}
}
  • 运行结果

image-20210729200240820

2.4 实现FactoryBean<T>方式

  • 定义UserDaoFactoryBean实现FactoryBean<UserDao>

UserDaoFactoryBean中实例化什么类型的对象泛型就是该类型。

//FactoryBean创建对象
public class UserDaoFactoryBean implements FactoryBean<UserDao> {//代替原始实例工厂中创建对象的方法public UserDao getObject() throws Exception {return new UserDaoImpl();}public Class<?> getObjectType() {return UserDao.class;}
}
  • applicationContext.xml配置
<!--方式四:使用FactoryBean实例化bean-->
<bean id="userDao" class="com.itheima.factory.UserDaoFactoryBean"/>

使用之前的AppForInstanceUser测试类去运行看结果就行了。注意配置文件中id="userDao"是否重复。

三、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 id="bookDao" class="com.itheima.dao.impl.BookDaoImpl" init-method="init" destroy-method="destory"/>
  • 测试类
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();}
}
http://www.yayakq.cn/news/584212/

相关文章:

  • 中山如何建网站代运营公司有哪些
  • 给网站增加功能怎么做wordpress开发教程 pdf
  • 图片库网站建设更新网站怎么弄
  • 烟台网站制作工具公众号 导入wordpress
  • 网站编程技术 吉林出版集团股份有限公司网站插件代码下载
  • 网站怎么做app如何给网站做推广
  • 家教补习中心网站建设新媒体 数字营销 网站建设
  • 上海建个人网站比较好的公司北京建网站公司价格
  • 企业网站宣传册应该哪个部门做东莞市外贸网站建设企业
  • 建设网站需要了解什么百度风云榜游戏排行榜
  • 如何在学校内网建立网站设计公司推荐
  • 网站开发人员 怎么保存成都广告公司名单
  • 个性化推荐网站开发源码站长工具友链查询
  • 共享虚拟主机 几个网站怎么建立和设计公司网站
  • 新网站建设 英文翻译四川手机网站设计方案
  • 小程序商城服务好得seo网络推广是什么意思
  • 网站公司未来计划ppt怎么做云服务器可以放几个网站
  • 网站备案必须在公司注册地酷炫的网站欢迎页面
  • wordpress建企业网站教程wordpress模板选择
  • 海南智能网站建设设计中国航发网上商城废旧物资
  • 公司门户网站建设策划书wordpress建站数据库
  • 用什么程序做资讯类网站天津都有哪些制作网站
  • 食品网站设计欣赏淘宝网站建设杭州
  • 建设中心小学网站移动端网站建设需要注意哪些问题
  • 东至县住房和城乡建设网站太原 招聘 网站建设 技术经理
  • 网站建设的几点体会有哪些网站可以做毕业设计
  • 南京有关制作网站的公司网站建设利润越来越低
  • 学校网站制作素材网站制作培训课程
  • 做网站做得好的公司有做项目接任务的网站
  • 免费的旅游网站模板做网站公司价格