一、通过构造器

无参构造器

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="
  5. http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd">
  7.  
  8. <!--配置我们的Dog类 spring 框架在底层
  9. 通过反射的机制 执行了我们的构造方法-->
  10. <bean id="dog" class="cn.pb.dao.impl.Dog"></bean>
  11.  
  12. </beans>

直接这样配置一个bean的话,相当于是调用这个Dog类的无参构造器,如果无参构造器不在,Spring上下文创建对象的时候就会报错。

无参构造器加setter方法注入field的值

类:

  1. package com.mc.base.learn.spring.bean;
  2.  
  3. public class Person {
  4.  
  5. private String name;
  6. private Integer id;
  7.  
  8. public String getName() {
  9. return name;
  10. }
  11.  
  12. public void setName(String name) {
  13. this.name = name;
  14. }
  15.  
  16. public Integer getId() {
  17. return id;
  18. }
  19.  
  20. public void setId(Integer id) {
  21. this.id = id;
  22. }
  23.  
  24. @Override
  25. public String toString() {
  26. return "Person [name=" + name + ", id=" + id + "]";
  27. }
  28.  
  29. }

bean配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://www.springframework.org/schema/beans
  4. http://www.springframework.org/schema/beans/spring-beans.xsd">
  5.  
  6. <bean class="com.mc.base.learn.spring.bean.Person" id="person">
  7. <property name="name" value="LiuChunfu"></property>
  8. <property name="id" value="125"></property>
  9. </bean>
  10.  
  11. </beans>

就bean标签下再用property标签来设置name和value

如果有field是引用型的,就不用value,用ref = "xxx",xxx就是某个bean的id或者name

利用有参数的构造方法:

类代码:

  1. package com.mc.base.learn.spring.bean;
  2.  
  3. public class Person {
  4.  
  5. private String name;
  6. private Integer id;
  7.  
  8. public Person(String name, Integer id) {
  9. super();
  10. this.name = name;
  11. this.id = id;
  12. }
  13.  
  14. public String getName() {
  15. return name;
  16. }
  17.  
  18. public void setName(String name) {
  19. this.name = name;
  20. }
  21.  
  22. public Integer getId() {
  23. return id;
  24. }
  25.  
  26. public void setId(Integer id) {
  27. this.id = id;
  28. }
  29.  
  30. @Override
  31. public String toString() {
  32. return "Person [name=" + name + ", id=" + id + "]";
  33. }
  34.  
  35. }

bean配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  3. xsi:schemaLocation="http://www.springframework.org/schema/beans
  4. http://www.springframework.org/schema/beans/spring-beans.xsd">
  5.  
  6. <bean class="com.mc.base.learn.spring.bean.Person" id="person">
  7. <constructor-arg name="id" value="123"></constructor-arg>
  8. <constructor-arg name="name" value="LiuChunfu"></constructor-arg>
  9. </bean>
  10.  
  11. </beans>

就是在bean标签下面,有个<constructor-arg>标签来确定这个bean的构造器的参数咯。

二、静态的工厂方法

  1. package cn.pb.dao;
  2.  
  3. import cn.pb.dao.impl.Dog;
  4.  
  5. /**
  6. * AnimalFactory静态工厂类
  7. */
  8. public class AnimalFactory {
  9. /**
  10. * 可以看到程序没有走构造方法
  11. */
  12. public AnimalFactory(){
  13. System.out.println("静态工厂的无参构造====");
  14. }
  15. //静态工厂,不会走无参构造
  16. public static Animal getDog(){
  17. System.out.println("工厂中静态获取Dog实例的方法");
  18. return new Dog();
  19. }
  20. }

然后配置bean:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="
  5. http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd">
  7.  
  8. <!--02.通过静态工厂 来创建我们对象的实例
  9. 工厂的本身构造不会执行 因为我们的方法是静态的 !类只会被加载,不会被实例化!
  10. getDog必须是静态的-->
  11. <bean id="dog" class="cn.pb.util.AnimalFactory" factory-method="getDog"></bean>
  12.  
  13. </beans>

三、动态工厂——就非static的getDog方法

  1. package cn.pb.dao;
  2.  
  3. import cn.pb.dao.impl.Dog;
  4.  
  5. /**
  6. * AnimalFactory动态工厂类
  7. */
  8. public class AnimalFactory {
  9. /**
  10. * 程序会先创建工厂实例 再调用getDog()方法
  11. */
  12. public AnimalFactory(){
  13. System.out.println("动态工厂的无参构造====");
  14. }
  15. //动态工厂 会先走无参构造 创建实例
  16. public Animal getDog(){
  17. System.out.println("工厂中动态工厂获取Dog实例的方法");
  18. return new Dog();
  19. }
  20. }

bean的配置:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="
  5. http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd">
  7.  
  8. <!--03.动态工厂创建 对象的实例-->
  9. <bean id="factory" class="cn.pb.util.AnimalFactory"></bean><!-- 调用哪个工厂里的哪个方法 来创建对象 对象的id是dog-->
  10. <bean id="dog" factory-bean="factory" factory-method="getDog"/>
  11.  
  12. </beans>

这个Dog的对象呢,需要一个实例的一个getDog方法嘛,所以要先有这个实例Factory的bean,然后再在这个factory-bean上填这个factory的bean。

参考文章:

例子分别在这两篇当中搞过来的hh

https://www.cnblogs.com/LiuChunfu/p/5574383.html——《Spring创建对象的方式3种方式》这个是真的三种方法,下面那个emm

https://www.cnblogs.com/lyb0103/p/7611826.html——《Spring笔记03(Spring创建对象的三种方式) 》工厂方法还有静态工厂的用的是这篇的例子

Spring创建对象的几种方法的更多相关文章

  1. java中需要关注的3大方面内容/Java中创建对象的几种方法:

    1)垃圾回收 2)内存管理 3)性能优化 Java中创建对象的几种方法: 1)使用new关键字,创建相应的对象 2)通过Class下面的new Instance创建相应的对象 3)使用I/O流读取相应 ...

  2. 创建对象的两种方法: new 和 面向对象(对象字面量)及对象属性访问方法

    创建对象的两种方法: new 和 面向对象(对象字面量)用 new 时:var o = new Object();o.name = "lin3615";alert(o.name); ...

  3. Javascript 创建对象的三种方法及比较【转载+整理】

    https://developer.mozilla.org/zh-CN/docs/JavaScript/Guide/Inheritance_and_the_prototype_chain 本文内容 引 ...

  4. 使用Spring Security3的四种方法概述

    使用Spring Security3的四种方法概述 那么在Spring Security3的使用中,有4种方法: 一种是全部利用配置文件,将用户.权限.资源(url)硬编码在xml文件中,已经实现过, ...

  5. Spring笔记03(Spring创建对象的三种方式)

    1.创建对象的三种方式和bean的生命周期的验证: Animal接口代码: package cn.pb.dao; /** * 动物接口 */ public interface Animal { //吃 ...

  6. Spring创建对象的三种方式以及创建时间

    创建对象的三种方式: 1.采用默认的构造函数创建 2.采用静态工厂方法 1.写一个静态工厂方法类 public class HelloWorldFactory { public static Hell ...

  7. java中创建对象的五种方法

    用最简单的描述来区分new关键字和newInstance()方法的区别:newInstance: 弱类型.低效率.只能调用无参构造.new: 强类型.相对高效.能调用任何public构造. newIn ...

  8. Java中创建对象的5种方法

    将会列举5种方法去创建 Java 对象,以及他们如何与构造函数交互,并且会有介绍如何去使用这些方法的示例. 作为一个 Java 开发人员,我们每天都会创建大量的 Java 对象,但是我们通常会使用依赖 ...

  9. Spring实例化Bean三种方法:构造器、静态工厂、实例工厂

    Spring中Bean相当于java中的类,可以通过xml文件对bean进行配置和管理. 一.Bean的实例化: 构造器实例化.静态工厂实例化.实例工厂方式实例化. 目录: 构造器实例化: xml配置 ...

随机推荐

  1. listen 76

    Flavors Fluctuate With Temperature Does an ice-cold drink actually taste better than the same bevera ...

  2. 如何通过giihub下载软件

    因为不懂英文, 所以找到了网站也不知道要怎么下载? 需求: 假设要下载的的一个jar包,  mybatis-generator 1.  利用搜索引擎 2. 点进去, 看到那个release  (rel ...

  3. python后台架构Django教程——manage.py命令

    一.manage.py命令选项 manage.py是每个Django项目中自动生成的一个用于管理项目的脚本文件,需要通过python命令执行.manage.py接受的是Django提供的内置命令. 内 ...

  4. HTML5设计原理

    HTML5是Web标准的巨大飞跃,它为什么要包含那些东西,它背后的设计原则是什么? <JavaScript DOM编程艺术>和<HTML5 For Web Designer>作 ...

  5. break、continue和return的区别

    break.continue和return的区别 break function myBreak() { for(var i = 0; i < 5; i++) { if(i == 3) { bre ...

  6. XmlSerialize error: There was an error generating the XML document.

    今天遇到一个很火的问题, 一个c#的class 序列化成xml后抛出异常, 信息为: XmlSerialize error: There was an error generating the XML ...

  7. /etc/bashrc和/etc/profile

    在一般的 linux 或者 unix 系统中, 都可以通过编辑 bashrc 和 profile来设置用户的工作环境, 很多文章对于 profile 和 bashrc 也都有使用, 但究竟每个文件都有 ...

  8. 系统启动挂载根文件系统时Kernel panic

    转自:http://qiuye.iteye.com/blog/543595 这类问题很常见,先总体介绍一下解决思路. 能出现让人激动的的控制台,那么系统移植已经接近完成:但是不少人在最后一步出现问题. ...

  9. CentOS虚拟机通过主机网络上网

    0 环境简介 环境如下: (1)宿主机为WIN7系统,连接内网,同时通过网关服务器上外网: (2)虚拟机为VMWare12下的CentOS7系统. 宿主机通过WIFI方式上外网的配置方法,参考本人另一 ...

  10. jmeter设置默认为中文

    1.编辑jmeter目录/bin/jmeter.porperties文件 2.点击将language的注释去掉,并将值变为zh_CN保存.