首先提供目录结构如下:

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

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. Excel填坑[0]

    Excel填坑[0] 本着一天水一贴的原则(放p),我又来填坑了.今天做一个很简单的排队图,虽然不难,但因为手机显示问题折腾了半天.感觉做图做表格不仅仅是靠技术,更重要的是思维. 就是这张图,看起来平 ...

  2. Django实现自动发布(1数据模型)

    公司成立之初,业务量较小,一个程序包揽了所有的业务逻辑,此时服务器数量少,上线简单,基本开发-测试-上线都是由开发人员完成. 随着业务量逐渐上升,功能增多,代码量增大,而单一功能上线需要重新编译整个程 ...

  3. Ubuntu 17.10安装VirtualBox 5.2.2 及相关问题解决

    link:https://www.linuxidc.com/Linux/2017-11/148870.htm sudo apt update && sudo apt upgrade s ...

  4. mysql关键字冲突

    在冲突的字段加上转移符,这样子就可以了: insert into test_table (wind_code,name,`read`,creade_time) values (?,?,?,?) (注意 ...

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

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

  6. GOROOT、GOPATH、GOBIN、project目录 _(转)

    前言:我觉得java程序员学golang很容易上手.关于GOROOT.GOPATH.GOBIN这些环境变量的设置,我隐约感觉到了java的影子(尽管我是一个C++程序员),唯一和java不同的是不能设 ...

  7. Django ORM 以连接池方式连接底层连接数据库方法

    django原生支持是不支持 以连接池方式连接数据库的 概述 在使用 Django 进行 Web 开发时, 我们避免不了与数据库打交道. 当并发量低的时候, 不会有任何问题. 但一旦并发量达到一定数量 ...

  8. 创建Observable序列

    1. just()方法 该方法通过传入一个默认值来初始化 下面样例我们显示地标注出了observable的类型为Observable, 即指定了这个Observable所发出的事件携带的数据类型必须是 ...

  9. Vue 组件封装发布到npm 报错 Uncaught TypeError: Cannot read property 'toLowerCase' of undefined

    Uncaught TypeError: Cannot read property 'toLowerCase' of undefined 原因是 没有导出 export default { name:& ...

  10. linux 常用软件安装

    pip3 yum install python36 python36-setuptools -y easy_install-3.6 pip