首页 > 其他分享 >springBean的三种实例化

springBean的三种实例化

时间:2024-03-13 19:13:34浏览次数:19  
标签:String stuPwd springBean bean 实例 三种 Student public

spring容器创建javaBean的实例,有三种方式。 分别是通过构造方法、 静态工程方法、 实例工厂方法。

前言:

1.构造方法实例化方式:

我的理解: 通过bean标签结合property调用set方法;通过bean标签结合constructor-arg调用构造方法;通过@Componen、@Repository、@Service、@Controller注解; 都属于调用构造方法对对象进行实例化。 因为如果调用bean标签结合property调用set方法而不提供无参构造方法就会报错。 而通过注解方式创建bean对象,不提供无参构造方法就会因为无法给有参构造方法的参数传入值而报错。

 

2.静态工厂实例化:

从spring容器中获取静态工厂时, spring会自动执行静态工厂的静态方法来返回另一个bean对象。

效果:用getBean获取静态工厂时,返回的是另一个bean对象

代码关键点:

  • 需要被实例化的java类、

  • 静态工厂类和静态方法(方法内返回需要被实例化的java类的对象)、

  • 用bean标签配置需要被实例化的类、 用bean标签配置静态工厂类,用另一个bean标签配置factory-method指定静态工厂方法、并用factory-bean指定静态工厂类的beanId。

注: 最终当要用 需要被实例化的java类对象时, 只需要获取指定factory-method的bean对象即可(会返回需要被实例化的java类的对象)

 

3.实例工厂实例化:

从spring容器中获取配置了factory-method的bean对象时, spring会自动执行实例工厂的创建对象的方法来返回另一个bean对象。

效果:用getBean获取配置了factory-method的bean对象时,返回的是另一个bean对象

代码关键点:

  • 需要被实例化的java类、

  • 实例工厂类和创建对象的方法(方法内返回需要被实例化的java类的对象)、

  • 用bean标签配置需要被实例化的类、 用bean标签配置实例工厂类并用factory-method指定实例工厂方法。

注: 最终当要用 需要被实例化的java类对象时, 只需要获取实例工厂类的bean对象即可(会返回需要被实例化的java类的对象)

 

这里演示后两种: 静态工厂实例化、 实例工程实例化

 

一、静态工厂实例化:

  • 需要被实例化的java类、

  • 静态工厂类和静态方法(方法内返回需要被实例化的java类的对象)、

  • 用bean标签配置需要被实例化的类、 用bean标签配置静态工厂类,用另一个bean标签配置factory-method指定静态工厂方法、并用factory-bean指定静态工厂类的beanId。

    注: 最终当要用 需要被实例化的java类对象时, 只需要获取指定factory-method的bean对象即可(会返回需要被实例化的java类的对象)

     

1.1.需要被实例化的java类Student:
package staticFactory;
public class Student {
    private String stuName,stuPwd;
    public Student() {  }
    public Student(String stuName, String stuPwd) {
        this.stuPwd = stuPwd;
        this.stuName = stuName;
    }
    public String getStuName() {
        return stuName;
    }
    public void setStuName(String stuName) {
        this.stuName = stuName;
    }
    public String getStuPwd() {
        return stuPwd;
    }
    public void setStuPwd(String stuPwd) {
        this.stuPwd = stuPwd;
    }
    public String toString() {
        return String.format("学生姓名:%s,学生密码:%s",stuName,stuPwd);
    }
}

 

 

1.2.静态工厂类:
package staticFactory;
​
public class StudentServiceFactory {
    private static Student student;
    public static Student createStudentServiceBean()
    {
        student=new Student();
        return  student;
    }
}

 

 

1.3.applicationContext.xml配置静态工厂:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="">
    <!--  静态工厂方式:  -->
    <bean id="stuFactory1" class="staticFactory.StudentServiceFactory" 
          factory-method="createStudentServiceBean">
        <constructor-arg name="userName" value="张三"> </constructor-arg>
        <constructor-arg name="userPwd" value="123"> </constructor-arg>
    </bean>
</beans>

 

 

1.4.Test测试类:
package staticFactory;
​
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
​
public class Test {
public static void main(String[] args) {
        ApplicationContext applicationContext = 
            new ClassPathXmlApplicationContext("applicationContext.xml");
        Student stu = (Student) applicationContext.getBean("stuFactory1");
        System.out.println( "stu学生对象的信息: " + stu.toString());
    }
}

 

 

 

二、实例工厂方式案例:

  • 需要被实例化的java类、

  • 实例工厂类和创建对象的方法(方法内返回需要被实例化的java类的对象)、

  • 用bean标签配置需要被实例化的类、 用bean标签配置实例工厂类并用factory-method指定实例工厂方法。

    注: 最终当要用 需要被实例化的java类对象时, 只需要获取实例工厂类的bean对象即可(会返回需要被实例化的java类的对象)

2.1.需要被实例化的java类Student:

package noStaticFactory;

public class Student {
private String stuName,stuPwd;
public Student() { }
public Student(String stuName, String stuPwd) {
this.stuPwd = stuPwd;
this.stuName = stuName;
}
public String getStuName() {
return stuName;
}
public void setStuName(String stuName) {
this.stuName = stuName;
}
public String getStuPwd() {
return stuPwd;
}
public void setStuPwd(String stuPwd) {
this.stuPwd = stuPwd;
}
public String toString() {
return String.format("学生姓名:%s,学生密码:%s",stuName,stuPwd);
}
}
2.2.实例工厂类:
package noStaticFactory;

public class StudentServiceFactory {
   private  Student student;
   public Student createStudentServiceBean(String userName,String userPwd){
      this.student=new Student(userName,userPwd);
      return  student;
  }
}
2.3.applicationContext.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="studentServiceFactory" class="noStaticFactory.StudentServiceFactory">
   </bean>
<bean id="stuFactory2"  factory-bean="studentServiceFactory"
         factory-method="createStudentServiceBean">
<constructor-arg name="userName" value="张三"> </constructor-arg>
<constructor-arg name="userPwd" value="123"> </constructor-arg>
</bean>

</beans>
2.4.Test测试类:
package noStaticFactory;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import staticFactory.Student;

public class Test {
   public static void main(String[] args) {
       ApplicationContext applicationContext =
           new ClassPathXmlApplicationContext("applicationContext.xml");
       staticFactory.Student stu = (Student) applicationContext.getBean("stuFactory2");
       System.out.println( "stu学生对象的信息: " + stu.toString());
  }
}
 

标签:String,stuPwd,springBean,bean,实例,三种,Student,public
From: https://www.cnblogs.com/zhaoyongqi/p/18071326/springfactory_zyq

相关文章

  • Python collections详细介绍及实例
    Python的collections库提供了许多有用的数据结构,这些数据结构是对内建数据类型的补充。以下是一些collections库中主要数据结构的详细介绍和示例:CounterCounter是一个字典子类,用于计数可哈希对象。常用于统计字符出现的次数、列表中元素出现的次数等。示例:fromcollections......
  • 运维常用的Python第三方模块及实例
    在运维工作中,Python是一种非常流行的脚本语言,因为它具有简洁的语法、丰富的库和跨平台的能力。运维工程师经常使用Python来编写自动化脚本,以简化日常任务。以下是一些运维常用的Python第三方模块及其示例:paramiko-用于SSH连接和执行命令。示例:importparamikossh=par......
  • Python 内置模块及实例
    Python有许多内置模块,这些模块提供了各种功能,如数学运算、文件操作、日期和时间处理、数据压缩等。以下是一些常用内置模块及其简单实例:math-提供数学函数和常量。实例:importmathprint(math.sqrt(16))#输出:4.0print(math.pi)#输出:3.1415926535897......
  • 软件应用实例分享,麻将馆棋牌室计时计费管理系统软件可连接配套的灯控器,灯控可以是有线
    软件应用实例分享,麻将馆棋牌室计时计费管理系统软件可连接配套的灯控器,灯控可以是有线或无线灯控一、前言以下软件操作教程以佳易王棋牌计时计费软件V18.0为例说明软件文件下载可以点击最下方官网卡片——软件下载——试用版软件下载1、软件基本功能:计时计费+商品销售管理......
  • 02-defaultdic类工作原理及应用实例(全网最全?含常值函数的创建)
    经常看到说“优雅地书写代码”,总是没啥感觉,直到这两天认真查阅了defaultdic这个类的一些资料。原来,灵活的应用,真的可以这么优雅、简单。1 简要描述defaultdic是collections包中的一个扩展类,是内置dict类的子类。这个类比较简单,除了重写了dict类的__miss__方法,增加了一个......
  • 2000+java毕业设计实例,包含代码论文,软件工程专业必看
    包含部署视频:1、基于ssh的婴幼儿产品销售系统毕业设计(项目报告+答辩PPT+源代码+数据库+截图+部署视频)☞☞☞点击查看项目整体介绍☞☞☞点击查看毕业论文介绍2、基于java的医院管理住院系统毕业设计(项目报告+答辩PPT+源代码+数据库+部署视频)☞☞☞点击查看项目整......
  • 缓冲流+实例(恢复文件顺序)
    1,BufferinputStream-字节`publicclasshelloWorldOutPut{publicstaticvoidmain(String[]args){//1.首先创建字符缓冲输入流与字节缓冲输出流try(BufferedReaderr1=newBufferedReader(newFileReader("D:\\zhaogongzuo\\code\\untitled\\src......
  • 深度学习4:感知器-三种激活函数及梯度下降算法
    文章目录1.感知器定义2.激活函数2.1常用的激活函数(1)三种激活函数的值域比较(2)三种函数对于定义域比较(3)PyTorch中的三种激活函数代码3求最优权重和偏置项(w,b)的方法3.1梯度下降算法(一元函数)实例3.2随机梯度下降算法(多元函数,单个样本)实例3.3批量梯度下降算法(......
  • MYSQL: 表表达式(CTE)实现递归实例
    环境:MYSQL8.0 + windows10 1、在TEST数据库中创建 表CTE_TEST.CREATETABLE`test`.`cte_test`(test_idINT,test_nameVARCHAR(50),parent_test_idINT,created_byINT,creation_dateTIMESTAMP);例子数据:INSERTINTO`test`.`cte_test`(test_i......
  • Linux系统中的lsmod、lsof、lspci、lsscsi命令及实例
    作为运维同学怎能不知道Linux系统中的lsmod、lsof、lspci、lsscsi命令呢,今天就来盘一盘她及实例。1、lsmod命令Linuxlsmod命令用于显示已经加载到内核中的模块的状态信息。执行lsmod命令后会列出所有已载入系统的模块。Linux操作系统的核心具有模块化的特性,应此在编译核心时,务......