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配置文件)的更多相关文章

  1. Spring学习(二)Spring的bean管理(XML)

    Bean的实例化方式 1.在Spring里面通过配置文件创建对象 2.bean实例化的三种方式第一种:使用类的无参数构造函数创建(最常用的方式,第2种和第3种方法一般不用) 如果类里面没有无参的构造函 ...

  2. Spring 的 Bean 管理(XML 方式)

    Spring 的 Bean 管理(XML 方式) 1. 三种实例化 Bean 的方式 使用类构造器实例化(默认无参数) 使用静态工厂方法实例化(简单工厂模式) 使用实例工厂方法实例化(工厂方法模式) ...

  3. Spring的bean管理(注解方式)

    注解:代码中的特殊标记,注解可以使用在类.方法.属性上面,使用注解可实现一些基本的功能.注解的写法是@注解名称(属性=属性值). 使用注解创建对象 第一步,创建Web项目,引入Spring的开发包 第 ...

  4. (转)Spring的bean管理(注解方式)

    http://blog.csdn.net/yerenyuan_pku/article/details/69663779 Spring的bean管理(注解方式) 注解:代码中的特殊标记,注解可以使用在类 ...

  5. Spring 的 Bean 管理(注解方式)

    Spring 的 Bean 管理(注解方式) 1. 导入必要的 jar 包和 xml 文件 使用注解需要导入 spring-aop 的 jar 包. applicationContext.xml 文件 ...

  6. 面试阿里,字节,美团必看的Spring的Bean管理详解

    IOC容器 工厂只负责创建对象,而Spring当然不仅仅是一个对象工厂,其核心是一个对象容器,其具备控制反转的能力,所以也称为IOC容器. 帮助我们存放对象,并且管理对象,包括:创建.销毁.装配,这样 ...

  7. Spring中加载xml配置文件的六种方式

    Spring中加载xml配置文件的六种方式 博客分类: Spring&EJB XMLSpringWebBeanBlog  因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件的形式装 ...

  8. Spring 的Bean管理的常用注解

    属性注入的注解(使用注解注入的方式,可以不用提供set方法) @Value 用于注入普通类型 @Autowired 自动装配 :默认按类型进行装配  按名称注入 @Qualifier 强制使用名称注入 ...

  9. Spring之Bean管理------注解方式

    编写测试类 1,编写相关的类 public interface UserDao { public void sayHello(); } public class UserDaoImpl impleme ...

  10. Spring框架的Bean管理的配置文件方式

    1. id属性和name属性的区别 * id -- Bean起个名字,在约束中采用ID的约束,唯一 * 取值要求:必须以字母开始,可以使用字母.数字.连字符.下划线.句话.冒号 id:不能出现特殊字符 ...

随机推荐

  1. OpenShitf 使用教程

    OpenShitf https://www.openshift.com 1.注册openshitf账号 https://www.openshift.com/app/account/new 2.gett ...

  2. tomcat7以上,ajax post参数后台获取不到的问题

    AJAX post传参后台获取不到查询参数. 网上找了各种方法,包括设置content-type,又是把json转成json格式字符串,问题依然存在,但是把post改成get又可以获取到,百思不得其解 ...

  3. 使用JDK自带的MessageDigest计算消息摘要

    使用JDK自带的MessageDigest计算消息摘要 上代码 /** * 使用JDK自带MessageDigest */ public class MessageDigestUtils { /** ...

  4. XML读取两种方法

    //第一种SAX方法解析 package a20170722.xmlex; import java.io.File; import java.util.ArrayList; import java.u ...

  5. usaco 2002 月赛 Chores 题解

    Description Farmer John's family pitches in with the chores during milking, doing all the chores as ...

  6. 【Stack Overflow -- 原创加工、原创整理、生产实战】-- 深度复制

    一.说明 1.本程序的核心代码不是我原创的,是我在Stack Overflow上搜集后加工出来的,原作者已忘记了~ 2.这段程序是我在上海携程(2014年左右)上班时整理并在生产环境应用的,先后经历了 ...

  7. Mac之OS系统下搭建JavaEE环境 <二> 之Tomcat 的安装配置

    二.Tomcat的安装与配置 1.下载Tomcat 找到Tomcat的官网 百度搜索Tomcat 点击下载即可 下载网址:http://tomcat.apache.org/download-80.cg ...

  8. Django学习(七)---添加新文章页面

    在template中添加add_article.html页面 (form  input)请求方法使用post 这个页面涉及到了两个响应函数 1)显示页面的响应函数  2)表单提交的响应函数 add_a ...

  9. C++第三篇--程序结构

    C++第三篇--程序结构 1. 初识程序结构 将类中的成员函数全部放在类外实现,类中只负责声明该函数 person.cpp #include <stdio.h> class Person{ ...

  10. Spark Streaming笔记——技术点汇总

    目录 目录 概况 原理 API DStream WordCount示例 Input DStream Transformation Operation Output Operation 缓存与持久化 C ...