Bean实例化的三种方式

说明:通过配置文件创建对象就称为Bean实例化。

第一种:使用类的无参构造创建(重点)

实体类

 package com.tyzr.ioc;
public class User {
private String username;
public User(String username) {
super();
this.username = username;
}
public User() {
}
public void add(){
System.out.println("--------->add");
}
public static void main(String[] args) {
//原始做法
//User user = new User();
//user.add();
}
}

配置文件

 <!-- IOC入门 -->
<bean id="user" class="com.tyzr.ioc.User"></bean>

测试类

 @Test
public void testUser(){
//加载核心配置文件,创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//得到我们配置的对象
//<bean id="user" class="com.tyzr.ioc.User"></bean>
User user = (User)context.getBean("user");
user.add();
}

问题:如果类里面没有无参构造方法会出现异常,如下:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'user' defined in class path resource [applicationContext.xml]: Instantiation of bean failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.tyzr.ioc.User]: No default constructor found; nested exception is java.lang.NoSuchMethodException: com.tyzr.ioc.User.<init>(

第二种:使用静态工厂创建

创建静态的方法,返回类的对象。

实体类

 package com.tyzr.bean;
public class Bean2 {
public void bean2(){
System.out.println("bean2------------");
}
 package com.tyzr.bean;
public class Bean2Factory {
//静态方法返回bean2
public static Bean2 getBean2(){
return new Bean2();
}
}

配置文件

 <!-- 使用静态工厂创建对象 -->
<bean id="bean2" class="com.tyzr.bean.Bean2Factory" factory-method="getBean2"></bean>

测试类

 @Test
public void testBean2(){
//加载核心配置文件,创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//得到我们配置的对象
//<bean id="bean2" class="com.tyzr.bean.Bean2Factory" factory-method="getBean2"></bean>
Bean2 bean2 = (Bean2)context.getBean("bean2");
bean2.bean2();
}

第三种:使用实例工厂创建

创建不是静态的方法,返回类的对象。

实体类

 package com.tyzr.bean;
public class Bean3 {
public void bean3(){
System.out.println("bean3------------");
}
}
 public class Bean3Factory {
//普通方法返回bean3
public Bean3 getBean3(){
return new Bean3();
}
}

配置文件

 <!-- 实例工厂创建对象 -->
<!-- 因为工厂里面的方法不是静态的,所以工厂本身也得创建对象 -->
<bean id="bean3Factory" class="com.tyzr.bean.Bean3Factory"></bean>
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>

测试类

 @Test
public void testBean3(){
//加载核心配置文件,创建对象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//得到我们配置的对象
//<!-- 实例工厂创建对象 -->
//<!-- 因为工厂里面的方法不是静态的,所以工厂本身也得创建对象 -->
//<bean id="bean3Factory" class="com.tyzr.bean.Bean3Factory"></bean>
//<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"></bean>
Bean3 bean3 = (Bean3)context.getBean("bean3");
bean3.bean3();
}

【Spring】的【bean】管理(XML配置文件)【Bean实例化的三种方式】的更多相关文章

  1. Spring中加载xml配置文件的常用的几种方式

    https://blog.csdn.net/qq877507054/article/details/62432062

  2. Spring bean管理器 bean实例化的三种方式

    bean实例化的三种方式实现 第一种:使用类的无参数构造方法创建(常用 重要) 第一种实例化方式最常用,实例化类时会通过调用无参构造方法创建.示例代码如下: package spring.com.Us ...

  3. Spring中bean实例化的三种方式

    之前我已经有好几篇博客介绍Spring框架了,不过当时我们都是使用注解来完成注入的,具体小伙伴可以参考这几篇博客(Spring&SpringMVC框架案例).那么今天我想来说说如何通过xml配 ...

  4. spring学习(03)之bean实例化的三种方式

    bean实体例化的三种方式 在spring中有三中实例化bean的方式: 一.使用构造器实例化:(通常使用的一个方法,重点) 二.使用静态工厂方法实例化: 三.使用实例化工厂方法实例化 第一种.使用构 ...

  5. spring学习笔记2---MVC处理器映射(handlerMapping)三种方式(附源码)

    一.根据Beanname访问controller: 在springmmvc-servlet.xml的配置handlermapping中加入beanname,通过该beanname找到对应的contro ...

  6. Spring配置文件-Bean实例化的三种方式

    1.无参构造方法实例化(详见我的博客) 2.工厂静态方法实例化 创建StaticFactory类 public class StaticFactory { public static UserDao ...

  7. Bean实例化的三种方式

    1. 构造器实例化 spring容器通过bean对应的默认的构造函数来实例化bean. 2. 静态工厂方式实例化 首先创建一个静态工厂类,在类中定义一个静态方法创建实例. 静态工厂类及静态方法: pu ...

  8. 上手spring boot项目(三)之spring boot整合mybatis进行增删改查的三种方式。

    1.引入依赖. <!--springboot的web起步依赖--><dependency> <groupId>org.springframework.boot< ...

  9. spring mvc从前台往后台传递参数的三种方式

     jsp页面: 第一种:使用控制器方法形参的方式(常用) 第二种:使用模型传参的方式(如果前台往后台传递的参数非常多,如果还使用形参的方式传递,非常复杂.我们可以使用模型传参的方式,把多 个请求的参数 ...

随机推荐

  1. 【原】iptables 交叉编译

    防火墙在做数据包过滤决定时,有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中.在数据包过滤表中,规则被分组放在我们所谓的链(chain)中.而netfil ...

  2. 如何在 Visual C# 中执行基本的文件 I/O

    演示文件 I/O 操作 本文中的示例讲述基本的文件 I/O 操作.“分步示例”部分说明如何创建一个演示下列六种文件 I/O 操作的示例程序: 注意:如果要直接使用下列示例代码,请注意下列事项: 必须包 ...

  3. 【模板】Lucas定理

    代码如下 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int maxn=1e5+10 ...

  4. .NET mocking框架Telerik JustMock发布R2 2019|附下载

    Telerik JustMock是一个灵活.功能齐全的.NET mocking框架.Telerik JustMock能够简化单元测试,现在测试复杂的场景比以前更加容易了.同时JustMock还与Vis ...

  5. Java基础——面试、笔试

    网址来源: http://www.nowcoder.com/discuss/5949?type=0&order=0&pos=4&page=2 参考资料:(java方面的一些面试 ...

  6. 举例子说明ubuntu中remove,autoremove,purge区别

    转自:慎用 apt-get autoremove !   apt-get 提供了一个用于下载和安装软件包的简易命令行界面.卸载软件包主要有这3个命令 remove – 卸载软件包autoremove ...

  7. [BZOJ2669][CQOI2012]局部极小值:DP+容斥原理

    分析 题目要求有且只有一些位置是局部极小值.有的限制很好处理,但是只有嘛,嗯...... 考虑子集反演(话说这个其实已经算是超集反演了吧还叫子集反演是不是有点不太合适),枚举题目给出位置集合的所有超集 ...

  8. springboot+druid+mybatis-Plus 配置详解

    网上找了很多关于springboot+druid+mybatis-Plus的配置,遇见的很多问题 也没找到好的解决方案.折腾了好几天终于自己配置通过了. springboot的pom文件 <pa ...

  9. 第三周课程总结&实验报告(一)

    实验报告(一) 1.打印输出所有的"水仙花数",所谓"水仙花数"是指一个3位数,其中各位数字立方和等于该数本身.例如,153是一个"水仙花数" ...

  10. angular 语法的应用

    angular.js 一个js框架 , 是三大主流框架之一:( vue  react angular ): 原先的开发:前端和后台,利用 Ajax 进行交互, 但是框架却提出了一种开发模式:mvc 这 ...