首先提供目录结构如下:

下面提供各文件代码,以供参考:

UserDynamicFactory.java

 package cn.sxt.factory;

 import cn.sxt.vo.User;

 /**
* ��̬��������������
*
*/
public class UserDynamicFactory {
public User createUser(String name,int age){
return new User(name,age);
}
}

UserFactory.java

 package cn.sxt.factory;

 import cn.sxt.vo.User;
/**
*
*/
public class UserFactory {
public static User createUser(String name,int age){
return new User(name,age);
}
}

User.java

 package cn.sxt.vo;

 public class User {
private String name;
private int age;
public User() {
}
public User(String name, int age) {
super();
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "User [name=" + name + ", age=" + age + "]";
}
}

beans.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="u1" class="cn.sxt.vo.User">
<!-- 通过参数的下标来设置参数 下标从0开始 -->
<constructor-arg index="0" value="张三疯"/>
<constructor-arg index="1" value="33"/>
</bean>
<bean id="u2" class="cn.sxt.vo.User">
<!-- 通过参数的名称来设置参数 name表示参数名称 -->
<constructor-arg name="name" value="张三疯"/>
<constructor-arg name="age" value="33"/>
</bean>
<bean id="u3" class="cn.sxt.vo.User">
<!-- 通过参数的类型来设置参数 type表示参数类型 -->
<constructor-arg type="java.lang.String" value="张三疯"/>
<constructor-arg type="int" value="33"/>
</bean>
<bean id="u4" class="cn.sxt.vo.User">
<property name="name" value="张无忌"/>
<property name="age" value="23"/>
</bean>
<!-- 通过静态工厂创建对象 -->
<bean id="u5" class="cn.sxt.factory.UserFactory" factory-method="createUser">
<constructor-arg type="java.lang.String" value="张三疯"/>
<constructor-arg type="int" value="33"/>
</bean>
<!-- 通过动态工厂来创建对象 -->
<bean id="factory" class="cn.sxt.factory.UserDynamicFactory"/>
<bean id="u6" factory-bean="factory" factory-method="createUser">
<constructor-arg type="java.lang.String" value="张三疯"/>
<constructor-arg type="int" value="33"/>
</bean>
</beans>

SpringTest.java

 package cn.sxt.spring;

 import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import cn.sxt.vo.User; public class SpringTest {
@Test
public void testHello(){
//��������
ApplicationContext ac = new ClassPathXmlApplicationContext("beans.xml");
User u=(User)ac.getBean("u6");
System.out.println(u);
}
}

一.通过构造方法来创建对象

1. 通过参数下标来设置参数的值

<!-- 通过有参构造方法创建对象 -->
<bean id="u1" class="cn.sxt.vo.User">
<!-- 通过参数的下标来设置参数 下标从0开始 -->
<constructor-arg index="0" value="张三疯"/>
<constructor-arg index="1" value="33"/>
</bean>

2.通过参数名称来设置

<bean id="u2" class="cn.sxt.vo.User">
<!-- 通过参数的名称来设置参数 name表示参数名称 -->
<constructor-arg name="name" value="张三疯"/>
<constructor-arg name="age" value="33"/>
</bean>

3.通过参数类型来设置

<bean id="u3" class="cn.sxt.vo.User">
<!-- 通过参数的类型来设置参数 type表示参数类型 -->
<constructor-arg type="java.lang.String" value="张三疯"/>
<constructor-arg type="int" value="33"/>
</bean>

二. 通过无参构造方法来创建对象

<bean id="u4" class="cn.sxt.vo.User">
<property name="name" value="张无忌"/>
<property name="age" value="23"/>
</bean>

注意:需要提供无参构造器,并且属性要有对应的set方法

三. 通过静态工厂来创建对象

静态工厂类:

/**
* 静态工厂方法
* 通过静态工厂来创建对象
*/
public class UserFactory {
public static User createUser(String name,int age){
return new User(name,age);
}
}

配置文件

<!-- 通过静态工厂创建对象 -->
<bean id="u5" class="cn.sxt.factory.UserFactory" factory-method="createUser">
<constructor-arg type="java.lang.String" value="张三疯"/>
<constructor-arg type="int" value="33"/>
</bean>

四.通过动态工厂来创建对象

动态工厂类

/**
* 动态工厂来创建对象
*
*/
public class UserDynamicFactory {
public User createUser(String name,int age){
return new User(name,age);
}
}

配置文件

<!-- 通过动态工厂来创建对象 -->
<bean id="factory" class="cn.sxt.factory.UserDynamicFactory"/>
<bean id="u6" factory-bean="factory" factory-method="createUser">
<constructor-arg type="java.lang.String" value="张三疯"/>
<constructor-arg type="int" value="33"/>
</bean>

java之spring之对象的创建的更多相关文章

  1. Java进阶知识17 Spring Bean对象的创建细节和创建方式

    本文知识点(目录): 1.创建细节         1) 对象创建: 单例/多例         2) 什么时候创建?         3)是否延迟创建(懒加载)         4) 创建对象之后, ...

  2. Java内存区域和对象的创建

    文章绝大部分内存摘抄自<深入理解Java虚拟机>,结合了小部分个人理解如果有什么错误,还望指出,如果涉及到侵权,联系博主,立马删除,再次感谢<深入理解Java虚拟机>的作者-周 ...

  3. 面试题:JVM在Java堆中对对象的创建、内存结构、访问方式

    一.对象创建过程 1.检查类是否已被加载 JVM遇到new指令时,首先会去检查这个指令参数能否在常量池中定位到这个类的符号引用,检查这个符号引用代表的类是否已被加载.解析.初始化,若没有,则进行类加载 ...

  4. 3.Java基础:String对象的创建和使用

    一.常用的创建方式 String s1=”abc“: String s2=”abc“: s1==s2    ==> true 解析:s1和s2指向的是同一个字符串池地址 二.不常用的创建方式 S ...

  5. Java中引用类型、对象的创建与销毁

    引用类型 在java中,除了基本数据类型之外的,就是引用数据类型了,引用指的是对象的一个引用,通过引用可以操作对象,控制对象,向对象发送消息. 简单来说,引用可以访问对象的属性,并调用对象的方法 创建 ...

  6. 【Java 它 JVM】对象的创建过程

    虚拟机会new 指令: 1.检查指令的参数可在对类的符号引用的恒定饮食定位,并检查是否已装上代表这个类的符号引用.分析和初始化.假设没有.您必须运行相应的类加载过程. 2.类加载通过审查,虚拟机将分配 ...

  7. java中的String对象的创建及堆栈的解释

    java中的string真的是很令人头疼呢!!! 请看这里 看这里

  8. IDEA Java Web(Spring)项目从创建到打包(war)

    创建Maven管理的Java Web应用 创建新项目,"create new project",左侧类型选择"maven",右侧上方选择自己的SDK,点击&qu ...

  9. 图解JAVA对象的创建过程

    前面几篇博文分别介绍了JAVA的Class文件格式.JVM的类加载机制和JVM的内存模型,这里就索性把java对象的创建过程一并说完,这样java对象的整个创建过程就基本上说明白了(当然你要有基础才能 ...

随机推荐

  1. 如何新建WebAPI,生成注释,TestAPI的项目

    一.新建WebAPI的项目 1. 在Web下,ASP.NET Web 应用程序,点击确定 2. 点击确定 3. 如图所示, 新建Controller 4 . 运行项目 二.注释 1. 在生成中,勾选x ...

  2. redis渐进式rehash机制

    在Redis中,键值对(Key-Value Pair)存储方式是由字典(Dict)保存的,而字典底层是通过哈希表来实现的.通过哈希表中的节点保存字典中的键值对.我们知道当HashMap中由于Hash冲 ...

  3. 论文阅读 | Recurrent Attentional Reinforcement Learning for Multi-label Image Recognition

    源地址 arXiv:1712.07465: Recurrent Attentional Reinforcement Learning for Multi-label Image Recognition ...

  4. Python中如何计算字符串里面某一个字符出现的次数?

    一个突发奇想,想解决一个学习中的行业痛点,让我又再度拾起了Python编程语言的学习.   刚学两天,今天遇到一个题,该题难度不高,但有一点关键点在网上找不到,网上也没有相关的答案,于是我只好千辛万苦 ...

  5. html5 input number类型使用整理

      一.  html5 input中的数字number类型, 只能输入整数,如果要输入浮点数呢,可以通过max.min和step去定义. type="number" 数字类型 mi ...

  6. 【Docker】容器与系统时间同步

    宿主机时间 [root@slave-1 ~]# date Fri May 12 11:20:30 CST 2017 容器时间 [root@slave-1 ~]# docker exec -ti 879 ...

  7. Windows删除空文件夹问题带来的学习与思考

    https://blog.csdn.net/XavierDarkness/article/details/84785482 1.问题产生:   前段时间得到一份资源,号称有近500个G的学习资料,花了 ...

  8. tensorflow 笔记 15:如何使用 Supervisor

    如何使用Supervisor在不使用Supervisor的时候,我们的代码经常是这么组织的 variables ... ops ... summary_op ... merge_all_summari ...

  9. scrapy之CrawlSpiders

    CrawlSpiders 通过下面的命令可以快速创建 CrawlSpider模板 的代码: scrapy genspider -t crawl loaderan cnblogs.com class s ...

  10. IPv4分类

    IPv4地址按逻辑层次分为五类 A类 保留给政府机构 A类地址第1字节为网络地址,其它3个字节为主机地址.它的第1个字节的第一位固定为0. A类地址网络号范围:1.0.0.0 - 126.0.0.0 ...