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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。