springboot实例化bean的方式,简述bean的实例化有哪几种常见的方法及过程

  springboot实例化bean的方式,简述bean的实例化有哪几种常见的方法及过程

  

目录

一、豆类实例化——构造方法(常用)二、豆类实例化——静态工厂(了解)三、豆类实例化——实例工厂(了解)四、豆类实例化——FactoryBean(实用)

 

  

一、bean实例化——构造方法(常用)

豆本质上就是对象,创建豆使用构造方法完成

 

  百道网接口:

  公共接口BookDao { public void save();}BookDaoImpl实现类,利用构造方式提供可访问的构造方法,输出相应字符串:

  导入com。我是IMA。道。书道;公众的类BookDaoImpl实现BookDao { public BookDaoImpl(){ system。出去。println( BookDao构造函数正在运行. ));} public void save(){ system。出去。println(书刀保存. );} }AppForinstanceBook:

  导入com。我是IMA。道。书道;导入org。spring框架。语境。应用程序上下文;导入组织。spring框架。语境。支持。classpathmlaplicationcontext公共类AppForInstanceBook { public static void main(String[]args){应用程序上下文CTX=new classpathmlaplicationcontext(应用程序上下文。XML’);CTX。get bean( book Dao );书刀。save();} }应用程序上下文。可扩展置标语言配置:

  !- 方式一:构造方法实例化bean-bean id=书道 class= com。我是IMA。道。impl。bookdaoimpl /执行结果:

  无参构造方法如果不存在,将抛出异常BeanCreationException

  

二、bean实例化——静态工厂(了解)

订单道接口:

 

  公共接口订单Dao { public void save();}OrderDaoImpl实现类:

  导入com。我是IMA。道。阶道;公共类OrderDaoImpl实现order Dao { public void save(){ system。出去。println(顺序刀保存. ));}}OrderDaoFactory静态工厂创建对象:

  导入com。我是IMA。道。阶道;导入com。我是IMA。道。impl。orderdaoimpl//静态工厂创建对象公众的类order Dao factory { public static order Dao getOrderDao(){ system。出去。println(工厂设置…));返回新的OrderDaoImpl();}}AppForinstanceOrder:

  导入com。我是IMA。道。阶道;导入org。spring框架。语境。应用程序上下文;重要

  t org.springframework.context.support.ClassPathXmlApplicationContext; public class AppForInstanceOrder { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); OrderDao orderDao = (OrderDao) ctx.getBean("orderDao"); orderDao.save(); }}applictionContext.xml配置:

  

 <!--方式二:使用静态工厂实例化bean--> <bean id="orderDao" class="com.itheima.factory.OrderDaoFactory" factory-method="getOrderDao"/>

执行结果:

 

  

 

  这种方式是为了兼容早期的遗留系统使用,了解即可。

  

 

  

三、bean实例化——实例工厂(了解)

UserDao接口:

 

  

public interface UserDao { public void save();}

UserDaoImpl实现类:

 

  

import com.itheima.dao.UserDao; public class UserDaoImpl implements UserDao { public void save() { System.out.println("user dao save ..."); }}

UserDaoFactory实例工厂创建对象:

 

  

import com.itheima.dao.UserDao;import com.itheima.dao.impl.UserDaoImpl;//实例工厂创建对象public class UserDaoFactory { public UserDao getUserDao(){ return new UserDaoImpl(); }}

AppForInstanceUser:

 

  

import com.itheima.dao.UserDao;import com.itheima.factory.UserDaoFactory;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext; public class AppForInstanceUser { public static void main(String[] args) { //创建实例工厂对象 UserDaoFactory userDaoFactory = new UserDaoFactory(); //通过实例工厂对象创建对象 UserDao userDao = userDaoFactory.getUserDao(); userDao.save(); }}

因为不是静态方法,必须用工厂对象对象调用。

 

  也可用Spring方法,不过要在xml文件中进行修改。

  AppForInstanceUser:

  

import com.itheima.dao.UserDao;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext; public class AppForInstanceUser { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) ctx.getBean("userDao"); userDao.save(); }}

applictionContext.xml配置:

 

  userFactory配合使用的,实际无意义

  factory-method方法名不固定,每次都需要配置

  

<!--方式三:使用实例工厂实例化bean--> <bean id="userFactory" class="com.itheima.factory.UserDaoFactory"/> <bean id="userDao" factory-method="getUserDao" factory-bean="userFactory"/>

执行结果:

 

  

 

  

 

  

四、bean实例化——FactoryBean(实用)

UserDao接口和UserDaoImpl实现类和实例化三一样。

 

  UserDaoFactoryBean,代替了原始实例化工厂中创建对象的方法:

  

import com.itheima.dao.UserDao;import com.itheima.dao.impl.UserDaoImpl;import org.springframework.beans.factory.FactoryBean;//FactoryBean创建对象public class UserDaoFactoryBean implements FactoryBean<UserDao> { //代替原始实例工厂中创建对象的方法 public UserDao getObject() throws Exception { return new UserDaoImpl(); } public Class<?> getObjectType() { return UserDao.class; }}

AppForInstanceUser:

 

  

import com.itheima.dao.UserDao;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext; public class AppForInstanceUser { public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); UserDao userDao = (UserDao) ctx.getBean("userDao"); userDao.save(); }}

applictionContext.xml配置:

 

  

 <!--方式四:使用FactoryBean实例化bean--> <bean id="userDao" class="com.itheima.factory.UserDaoFactoryBean"/>

执行结果:

 

  

 

  对象默认单例,需要改非单例时

  在UserDaoFactoryBean重写isSingleton方法,true为单例模式,false为非单例模式

  通常为单例,这个方法通常不写

  

 public boolean isSingleton() { return true; }

到此这篇关于Spring实例化bean的四种方式详解的文章就介绍到这了,更多相关Spring实例化bean内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

 

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: