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. js 代码大全(各种方法、属性)

    事件源对象event.srcElement.tagNameevent.srcElement.type捕获释放event.srcElement.setCapture(); event.srcElemen ...

  2. windows server :远程桌面服务当前正忙,因此无法完成您尝试执行的任务

    原因是:Csrss.exe 进程和某些应用程序 (例如,Microsoft Excel 或 Microsoft Visio) 之间发生的死锁情况下会出现此问题. 解决:下载一个修复补丁,安装后重启服务 ...

  3. CentOS 7系统yum仓库搭建方法

    YUM: Yellowdog Update Modifier,rpm的前端程序,可解决软件包相关依赖性,可在多个库之间定位软件包,up2date的替代工具,是为了进一步简化RPM管理软件难度以及自动分 ...

  4. NETCONF

    NETCONF协议(Network Configration Protocol) NETCONF是一个基于XML的交换机配置接口,用于替代CLI.SNMP等配置交换机. 本质上来说,NETCONF就是 ...

  5. 【NOIP2014模拟8.24】小X 的道路修建

    题目 因为一场不小的地震,Y 省n 个城市之间的道路都损坏掉了,省长希望小X 将城市之间的道路重修一遍. 很多城市之间的地基都被地震破坏导致不能修路了,因此可供修建的道路只有m 条.因为施工队伍有限, ...

  6. springboot使用外部application.properties配置文件

    一.背景介绍 springboot默认的application.properties文件只能在项目内部,如果打成docker镜像后配置文件也打进去了,这样每次需要改动配置(比如数据库的连接信息)就需要 ...

  7. Java——序列化 反序列化

    记录一下: 先粘两个比较繁琐的方法: put: public void putSerializableObject(String key, Object value, int expireTime) ...

  8. js for循环 框架内部的

    var head001 =true; var head002 = true; var head003 = true; ; h++) { console.log(h); } h=; ;h < ; ...

  9. ps -aux显示信息COMMAND不全

    ps -aux结果: ps -auxwww结果:

  10. PCL智能指针疑云 <一>

    背景: 最近写了一个包,使用ndt算法拼接点云,构建三维壁面环境的点云地图. 设计一个lidar类,表征激光雷达.可以获取点云数据并存储到容器 std::vector<PointCloudPtr ...