首先提供目录结构如下:

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

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. 二分法递归版本(c++)

    利用二分法求解在区间[0,π/2]上的根 #include<iostream> #include <cmath> using namespace std; double dic ...

  2. 第08组 Alpha冲刺(1/4)

    队名 八组评分了吗 组长博客 小李的博客 作业博客 作业链接 组员1(组长) 过去两天完成了哪些任务 文字/口头描述 11月9号开小会安排alpha冲刺开始的工作,进行任务分工,具体见11.09会议记 ...

  3. 安装anaconda和tensorflow(windows)

    Anaconda安装时勾选All User和启用环境变量可切换为清华镜像conda config --add channels https://mirrors.tuna.tsinghua.edu.cn ...

  4. javascript的Map使用

    setExpenseAndAmountSum: function() { var detailList = vehicleVueObj.vehicleData; var expenseAmountSu ...

  5. Unity2019.1中文技术手册离线版

    使用离线版优质.系统化的教程.经验文档.参考手册,为开发者节省时间,提高效率! 解压后打开UnityDocumentation_2019.1/Manual/index.html 需要的自取,下载地址: ...

  6. android测试和iOS测试的区别

    一.常识性区别 二.导航方式 iOS:Tab放在页面底部,不能通过滑动来切换,只能点击.也有放在上面的,也不能滑动,但有些Tab本身可以滑动,比如天猫的.还有新闻类的应用. Android:一般放在页 ...

  7. IIS连接数、并发连接数、最大并发工作线程数、应用程序池的队列长度、应用程序池的最大工作进程数详解

    IIS:连接数.并发连接数.最大并发工作线程数.应用程序池的队列长度.应用程序池的最大工作进程数详解 iis性能指标的各种概念:连接数.并发连接数.最大并发工作线程数.应用程序池的队列长度.应用程序池 ...

  8. IIS调优--增加并发处理能力

    一个ASP.NET项目在部署到生产环境时,当用户并发量达到200左右时,IIS出现了明显的请求排队现象,发送的请求都进入等待,无法及时响应,系统基本处于不可用状态.因经验不足,花了很多时间精力解决这个 ...

  9. http 请求方式解析

    表单中<form></form>, 如果使用method="get"方式提交,则不会指定请求体编码方式.默认请求参数使用?拼接到url之后.如:http:/ ...

  10. hangfire 实现已完成的job设置过期,防止数据无限增长

    1.添加SucceededStateExpireHandler 继承接口 IStateHandler public class SucceededStateExpireHandler : IState ...