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

怎么做网站下载链接洛阳网站建设报价

怎么做网站下载链接,洛阳网站建设报价,wordpress快速清除本地图片,seo服务器选择对象已经能交给Spring的IOC容器来创建了#xff0c;但是容器是如何来创建对象的呢? 就需要研究下bean的实例化过程#xff0c;在这块内容中主要解决两部分内容#xff0c;分别是 bean是如何创建的 实例化bean的三种方式#xff0c;构造方法,静态工厂和实例工厂 在讲解这… 对象已经能交给Spring的IOC容器来创建了但是容器是如何来创建对象的呢? 就需要研究下bean的实例化过程在这块内容中主要解决两部分内容分别是 bean是如何创建的 实例化bean的三种方式构造方法,静态工厂和实例工厂 在讲解这三种创建方式之前我们需要先确认一件事:bean本质上就是对象对象在new的时候会使用构造方法完成那创建bean也是使用构造方法完成的。 基于这个知识点出发我们来验证spring中bean的三种创建方式。 目录 一、构造方法实例化 优化 二、静态工厂实例化 使用工厂来创建对象 优化 三、实例工厂实例化 优化FactoryBean使用 小结 一、构造方法实例化 优化 1准备需要被创建的类 准备一个BookDao和BookDaoImpl类 package com.water.dao;public interface BookDao {public void save(); } 在BookDaoImpl类中添加一个无参构造函数并打印一句话方便观察结果。  package com.water.dao.impl;import com.water.dao.BookDao;public class BookDaoImpl implements BookDao {public BookDaoImpl() {System.out.println(book dao constructor is running ....);}public void save() {System.out.println(book dao save ...);} } 2将类配置到Spring容器 ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd!--bean标签标示配置beanid属性标示给bean起名字class属性表示给bean定义类型--bean idbookDao classcom.water.dao.impl.BookDaoImpl/bean /beans 3运行程序如果控制台有打印构造函数中的输出说明Spring容器在创建对象的时候也走的是构造函数 4将构造函数改成private测试 运行程序能执行成功 说明内部走的依然是构造函数,能访问到类中的私有构造方法,显而易见Spring底层用的是反射。 5构造函数中添加一个参数测试 运行程序程序会报错说明Spring底层使用的是类的无参构造方法。 接下来我们主要研究下Spring的报错信息来学一学如阅读。 错误信息从下往上依次查看因为上面的错误大都是对下面错误的一个包装最核心错误是在最下面 Caused by: java.lang.NoSuchMethodException: com.itheima.dao.impl.BookDaoImpl.init() Caused by 翻译为引起即出现错误的原因 java.lang.NoSuchMethodException:抛出的异常为没有这样的方法异常 com.itheima.dao.impl.BookDaoImpl.init():哪个类的哪个方法没有被找到导致的异常init()指定是类的构造方法即该类的无参构造方法 如果最后一行错误获取不到错误信息接下来查看第二层 Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.itheima.dao.impl.BookDaoImpl]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.itheima.dao.impl.BookDaoImpl.init() nested:嵌套的意思后面的异常内容和最底层的异常是一致的 Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.itheima.dao.impl.BookDaoImpl]: No default constructor found; Caused by: 引发 BeanInstantiationException:翻译为bean实例化异常 No default constructor found:没有一个默认的构造函数被发现 看到这其实错误已经比较明显 Exception in thread main org.springframework.beans.factory.BeanCreationException: Error creating bean with name bookDao defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.itheima.dao.impl.BookDaoImpl]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.itheima.dao.impl.BookDaoImpl.init()。 至此关于Spring的构造方法实例化就已经学习完了因为每一个类默认都会提供一个无参构造函数所以其实真正在使用这种方式的时候我们什么也不需要做。这也是我们以后比较常用的一种方式。 二、静态工厂实例化 使用工厂来创建对象 在讲这种方式之前我们需要先回顾一个知识点是使用工厂来创建对象的方式 准备一个OrderDao和OrderDaoImpl类创建一个工厂类OrderDaoFactory并提供一个静态方法编写AppForInstanceOrder运行类在类中通过工厂获取对象 public interface OrderDao {public void save(); }public class OrderDaoImpl implements OrderDao {public void save() {System.out.println(order dao save ...);} } //静态工厂创建对象 public class OrderDaoFactory {public static OrderDao getOrderDao(){return new OrderDaoImpl();} } public class AppForInstanceOrder {public static void main(String[] args) {//通过静态工厂创建对象OrderDao orderDao OrderDaoFactory.getOrderDao();orderDao.save();} } 如果代码中对象是通过上面的这种方式来创建的如何将其交给Spring来管理呢 优化 这就要用到Spring中的静态工厂实例化的知识了具体实现步骤为: 1在spring的配置文件application.properties中添加以下内容 ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd!--bean标签标示配置beanid属性标示给bean起名字class属性表示给bean定义类型 工厂类的类全名factory-mehod:具体工厂类中创建对象的方法名--bean idorderDao classcom.water.dao.factory.OrderDaoFactory factory-methodgetOrderDao/ /beans 3在AppForInstanceOrder运行类使用从IOC容器中获取bean的方法进行运行测试 package com.water;import com.water.dao.BookDao; import com.water.dao.OrderDao; import com.water.dao.factory.OrderDaoFactory; import com.water.server.BookService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;public class App {public static void main( String[] args ) {ApplicationContext ctx new ClassPathXmlApplicationContext(applicationContext.xml);OrderDao orderDao (OrderDao) ctx.getBean(orderDao);orderDao.save();} }运行后可以查看到结果  这样的好处就是在工厂的静态方法中我们除了new对象还可以做其他的一些业务操作这些操作必不可少。 public class OrderDaoFactory {public static OrderDao getOrderDao(){System.out.println(factory setup....);//模拟必要的业务操作return new OrderDaoImpl();} } 之前new对象的那种方式就无法添加其他的业务内容。 三、实例工厂实例化 package com.water.dao;public interface OrderDao {public void save(); }package com.water.dao.impl;import com.water.dao.OrderDao;public class OrderDaoImpl implements OrderDao {public void save() {System.out.println(order dao save ...);} } package com.water;import com.water.dao.BookDao; import com.water.dao.OrderDao; import com.water.dao.factory.OrderDaoFactory; import com.water.server.BookService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;public class App {public static void main( String[] args ) {//创建实例工厂对象OrderDaoFactory OrderDaoFactory new OrderDaoFactory();//通过实例工厂对象创建对象OrderDao OrderDao OrderDaoFactory.getOrderDao();OrderDao.save();} } 对于上面这种实例工厂的方式如何交给Spring管理呢 优化FactoryBean使用 1创建一个OrderDaoFactoryBean的类实现FactoryBean接口重写接口的方法 FactoryBean接口其实会有三个方法分别是: T getObject() throws Exception;Class? getObjectType();default boolean isSingleton() {return true; } 方法一:getObject()被重写后在方法中进行对象的创建并返回 方法二:getObjectType(),被重写后主要返回的是被创建类的Class对象 方法三:没有被重写因为它已经给了默认值从方法名中可以看出其作用是设置对象是否为单例默认true单例。 package com.water.dao.factory;import com.water.dao.OrderDao; import com.water.dao.impl.OrderDaoImpl; import org.springframework.beans.factory.FactoryBean;public class OrderDaoFactoryBean implements FactoryBeanOrderDao {Overridepublic OrderDao getObject() throws Exception {return new OrderDaoImpl();}Overridepublic Class? getObjectType() {return OrderDao.class;}public boolean isSingleton() {return false;} } 2在Spring的配置文件中进行配置 ?xml version1.0 encodingUTF-8? beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd!--bean标签标示配置beanid属性标示给bean起名字class属性表示给bean定义类型 工厂类的类全名factory-mehod:具体工厂类中创建对象的方法名--bean idorderDao classcom.water.dao.factory.OrderDaoFactoryBean/ /beans 3运行类不用做任何修改直接运行 package com.water;import com.water.dao.BookDao; import com.water.dao.OrderDao; import com.water.dao.factory.OrderDaoFactory; import com.water.server.BookService; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext;public class App {public static void main( String[] args ) {//创建实例工厂对象ApplicationContext ctx new ClassPathXmlApplicationContext(applicationContext.xml);OrderDao orderDao1 (OrderDao) ctx.getBean(orderDao);System.out.println(orderDao1);OrderDao orderDao2 (OrderDao) ctx.getBean(orderDao);System.out.println(orderDao2);} } 通过验证会发现默认是单例那如果想改成单例具体如何实现只需要将isSingleton()方法进行重写修改返回为false即可。 重新运行查看结果 从结果中可以看出现在已经是非单例了但是一般情况下我们都会采用单例也就是采用默认即可。所以isSingleton()方法一般不需要进行重写。 小结 通过这一节的学习需要掌握: 1bean是如何创建的呢? 构造方法 2Spring的IOC实例化对象的三种方式分别是: 构造方法(常用) 静态工厂(了解) 实例工厂(了解) FactoryBean(实用) 这些方式中重点掌握构造方法和FactoryBean即可。 需要注意的一点是构造方法在类中默认会提供但是如果重写了构造方法默认的就会消失在使用的过程中需要注意如果需要重写构造方法最好把默认的构造方法也重写下。
http://www.dnsts.com.cn/news/242677.html

相关文章:

  • 宝塔wordpress建站教程四川餐饮培训学校排名
  • 网站建设的个人总结网络营销有哪些推广的方法
  • 百度网站优化是什么意思昆山做百度网站
  • 网站建设程序开发过程建网站多少费用
  • 网站建设捌金手指花总三wordpress id乱码
  • 多站点wordpress简数采集器福田庆三下巴
  • 网站的备案在哪备案吗网站建设中效果
  • 深圳网站建设服务合同建设银行网站特色
  • 做单屏网站 高度是多少wordpress弹幕
  • 北京丰台网站优化wordpress应用商店主题
  • 申请关闭网站黄骅市市长
  • 网站 seo免费域名注册流程
  • 网站建设内容3000字wordpress如何设置头像
  • 建设装修公司网站谷歌seo搜索优化
  • 牟平做网站怎样用ps设计网站模板
  • 济南行知网网站建设北京中兴时代网站建设
  • 企业的网站内容管理系统设计专业哪个学校好
  • 南昌手机网站建设asp.net网站开发是什么
  • 系统网站设计订餐网站怎么做
  • 福田网站设计哪家好wordpress 折800模板
  • 个人资料展示网站哪种网站
  • 网站为什么没有被收录网站开发实训内容
  • 大沥网站开发公司官网网址
  • 网站建设及推广培训信息流推广渠道
  • 怎么修改网站图片深圳开发软件公司
  • wordpress娱乐网模板海口百度seo公司
  • 中美网站建设中国建筑装饰网设计师联盟
  • 中国建设信号工证网站wordpress 暖岛 主题
  • 微网站是手机网站吗wordpress vip付费插件
  • 网站修改图片怎么做如何查看网站外链