实例化bean的方式有三种,如下:

1、无参构造方法实例化
2、工厂静态方法实例化
3、工厂普通方法实例化

此处演示的项目结构如下:

方法一:无参构造方法实例化(注意,该类中不能存在有参构造函数)

UserDaoImpl.java

public class UserDaoImpl implements IUserDao {
@Override
public void save() {
System.out.println("save方法执行成功...");
}
}

UserServiceImpl.java

public class UserServiceImpl implements IUserService {
@Override
public void save() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
IUserDao userDao = (IUserDao) applicationContext.getBean("userDao");
userDao.save();
}
}

BeanInitialTest.java

public class BeanInitialTest {

    /**
* bean实例化方法一: 无参构造方法实例化
*/
@Test
public void test1(){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
IUserService userService = (IUserService) applicationContext.getBean("userService");
userService.save();
}
}

applicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!--无参构造方法实例化-->
<bean id="userDao" class="com.hy.bean.dao.impl.UserDaoImpl"></bean>
<bean id="userService" class="com.hy.bean.service.impl.UserServiceImpl"></bean>
</beans>

测试代码和UserDaoImpl、UserServiceImpl代码一致,下面方法二、方法三直接省略该部分

方法二:工厂静态方法实例化

StaticBeanFactory.java

public class StaticBeanFactory {
/**
* 应用场景
* 依赖的jar包中有个A类,A类中有个静态方法m1,m1方法的返回值是一个B对象。如果我们频繁使用
* B对象,此时我们可以将B对象的创建权交给spring的IOC容器,以后我们在使用B对象时,无需调用A类
* 中的m1方法,直接从IOC容器获得
*/
public static IUserDao returnIUserDao(){
return new UserDaoImpl();
} public static IUserService returnIUserService(){
return new UserServiceImpl();
}
}

applicationContext.xml

<!--工厂静态方法实例化-->
<bean id="userDao" class="com.hy.bean.factory.StaticBeanFactory" factory-method="returnIUserDao" />
<bean id="userService" class="com.hy.bean.factory.StaticBeanFactory" factory-method="returnIUserService"/>

方法三:工厂普通方法实例化

NoramlBeanFactory.java

public class NormalBeanFactory {

    /**
* 依赖的jar包中有个A类,A类中有个普通方法m1,m1方法的返回值是一个B对象。如果我们频繁使用
* B对象,
* 此时我们可以将B对象的创建权交给spring的IOC容器,以后我们在使用B对象时,无需调用A类中的m1
* 方法,直接从IOC容器获得。
*/ public IUserDao returnIUserDao(){
return new UserDaoImpl();
} public IUserService returnIUserService(){
return new UserServiceImpl();
}
}

applicationContext.xml

<!--工厂普通方法实例化-->
<bean id="normalBeanFactory" class="com.hy.bean.factory.NormalBeanFactory" />
<bean id="userService" factory-bean="normalBeanFactory" factory-method="returnIUserService" />
<bean id="userDao" factory-bean="normalBeanFactory" factory-method="returnIUserDao" />

详细代码地址如下:https://gitee.com/duy123456/bean-initial

bean实例化三种方式的更多相关文章

  1. Spring学习之实例化bean的三种方式

    实例化bean的三种方式 构造器实例化bean Person.java public class Person { private String name; private Integer age; ...

  2. spring创建bean的三种方式

    spring创建bean的三种方式: 1通过构造方法创建bean(最常用) 1.1 spring默认会通过无参构造方法来创建bean,如果xml文件是这样配置,则实体类中必须要有无参构造方法,无参构造 ...

  3. Solon 开发,三、构建一个Bean的三种方式

    Solon 开发 一.注入或手动获取配置 二.注入或手动获取Bean 三.构建一个Bean的三种方式 四.Bean 扫描的三种方式 五.切面与环绕拦截 六.提取Bean的函数进行定制开发 七.自定义注 ...

  4. Spring 实例化bean的三种方式

    第一种方法:直接配置Bean <bena id="所需要实例化的一个实例名称" class="包名.类名"/> 例如: 配置文件中的bean.XML ...

  5. Spring装配Bean的三种方式+导入和混合配置

    目录 Spring IoC与bean 基于XML的显式装配 xml配置的基本结构 bean实例的三种创建方式 依赖注入的两种方式 构造器注入方式 setter方法注入方式 利用命名空间简化xml 基于 ...

  6. spring 装配bean的三种方式

    这段时间在学习Spring,依赖注入DI和面向切面编程AOP是Spring框架最核心的部分.这次主要是总结依赖注入的bean的装配方式. 什么是依赖注入呢?也可以称为控制反转,简单的来说,一般完成稍微 ...

  7. Spring容器装配Bean的三种方式

    欢迎查看Java开发之上帝之眼系列教程,如果您正在为Java后端庞大的体系所困扰,如果您正在为各种繁出不穷的技术和各种框架所迷茫,那么本系列文章将带您窥探Java庞大的体系.本系列教程希望您能站在上帝 ...

  8. Spring实战(三)Spring中装配Bean的三种方式---XML、JavaConfig、AutoWire

    创建应用对象之间协作关系的行为称为装配(wiring),这也是依赖注入的本质. Spring容器负责创建应用程序中的bean并通过DI来协调这些对象之间的关系,而开发者需要告诉Spring需要创建哪些 ...

  9. 装配Bean的三种方式

    一.装配Bean就是在xml写一个Bean标签:装配完Bean,还需要读取xml配置文件创建Spring容器来创建对象: 1.new 实现类方式 正常的三种创建Bean容器的方法都可以根据装配的Bea ...

  10. Spring实例化Bean的三种方式及Bean的类型

    1.使用类构造器实例化  [默认的类构造器] <bean id=“orderService" class="cn.itcast.OrderServiceBean"/ ...

随机推荐

  1. nginx转发tomcat之https不生效

    1.修改tomcat配置server.xml,让它从请求头中的X-Forwarded-Proto读取 <!-- xpath://Server/Service/Engine/Value --> ...

  2. GPT和MBR分区格式

    目前市面上磁盘有两个格式,一种是GPT(Master Boot Record)分区一种是MBR(Master Boot Record)分区. 像UEFI用于取代老旧的BIOS,而GPT则为的是取代老旧 ...

  3. 分享: 第二性 合卷本 竖本.PDF

    书本详情 第二性台版 作者: 西蒙.德.波娃(Simone de Beauvoir)出版社: 貓頭鷹原作名: Le Deuxième Sexe译者: 邱瑞鑾出版年: 2013-10页数: 1136装帧 ...

  4. Android中动态添加tab

    来源过于啰嗦,这里只有简化后的. 转载请注明出处  http://www.cnblogs.com/zaiyuzhong/p/add-tab-dynamic-in-android.html 建立对应的布 ...

  5. 01_Node的版本管理

    Node的版本管理工具 常见的node的版本管理工具有两种N.NVM 但是他们有一个致命的问题就是不支持Windwos 但是NVM延申了一个nvm-windows的版本,他就可以很好的支持window ...

  6. hive在执行简单的insert命令也会卡在kill command

    终于解决了 我的配置有点问题,但在每次进入hive后,执行一遍   set hive.exec.mode.local.auto=true; 就可以用了 终于,困扰我三四天的问题解决了

  7. demo code

    using System.Reflection; // 引用这个才能使用Missing字段 namespace hello{    public partial class Form1 : Form  ...

  8. start-stop服务器启动

    springBoot打成jar包扔到linux服务器 start.sh nohup java -Dfile.encoding=utf-8  -jar XXX-1.0-SNAPSHOT.jar > ...

  9. dev随笔记录

    gridcontrolbandedGridviewPrintHeader = false(不显示列头)#region 勾选框全选或反选 List<string> islockList = ...

  10. Virtualbox EFI 写入startup.nsh

    安装好的Debian系统,重启后会因为找不到入口而无法启动.定位grubx64.efi文件,可用ls直接查找或一步一步查找ls fs0:\EFI\debian\grubx64.efi edit fs0 ...