7.3Java EE——Bean的实例化

news/2025/1/16 1:55:56/

一、构造方法实例化

下面通过一个案例演示Spring容器如何通过构造方法实例化Bean。 

(1)、在IDEA中创建一个名为chapter07的Maven项目,然后在项目的pom.xml文件中配置需使用到的Spring四个基础包和Spring的依赖包。

<dependencies><!-- spring-core的依赖包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>5.2.8.RELEASE</version></dependency><!-- spring-beans的依赖包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.2.8.RELEASE</version></dependency><!-- spring-context的依赖包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.8.RELEASE</version></dependency><!-- spring-expression的依赖包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>5.2.8.RELEASE</version></dependency><!-- commons-logging的依赖包 --><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>5.2.8.RELEASE</version></dependency></dependencies>

(2)、创建一个名称为com.mac的包,在该包中创建Bean1类。 

package com.mac;
public class Bean1 {public Bean1(){System.out.println("这是Bean1");}
}

(3)、新建applicationBean1.xml作为Bean1类的配置文件,在该配置文件中定义一个id为bean1的Bean,并通过class属性指定其对应的实现类为Bean1。 

<?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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="bean1" class="com.mac.Bean1"></bean>
</beans>

(4)、创建测试类Bean1Test,在main()方法中通过加载applicationBean1.xml配置文件初始化Spring容器,再通过Spring容器生成Bean1类的实例bean1,用来测试构造方法是否能实例化Bean1。

public class Bean1Test {public static void main(String[] args){// 加载applicationBean1.xml配置ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationBean1.xml");// 通过容器获取配置中bean1的实例Bean1 bean=(Bean1) applicationContext.getBean("bean1");System.out.print(bean);		}
}

(5)、 在IDEA中启动Bean1Test类,控制台会输出结果。

 

二、 静态工厂实例化 

下面通过一个案例演示如何使用静态工厂方式实例化Bean。

(1)、创建Bean2类,该类与Bean1类一样,只定义一个构造方法,不需额外添加任何方法。

package com.mac;
public class Bean2 {public Bean2(){System.out.println("这是Bean2");}
}

 (2)、创建一个MyBean2Factory类,在该类中定义一个静态方法createBean(),用于创建Bean的实例。createBean()方法返回Bean2实例。

package com.mac;
public class MyBean2Factory {//使用MyBean2Factory类的工厂创建Bean2实例public static Bean2 createBean(){return new Bean2();}
}

(3)、新建applicationBean2.xml文件,作为MyBean2Factory类的配置文件。 

<?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/beanshttp://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
<bean id="bean2"class="com.mac.MyBean2Factory"factory-method="createBean"/>
</beans>

(4)、创建一个测试类Bean2Test,用于测试使用静态工厂方式是否能实例化Bean。 

public class Bean2Test {public static void main(String[] args) {// ApplicationContext在加载配置文件时,对Bean进行实例化ApplicationContext applicationContext =new ClassPathXmlApplicationContext("applicationBean2.xml");System.out.println(applicationContext.getBean("bean2"));}
}

 (5)、在IDEA中启动Bean2Test类,控制台会输出结果。

 

 


http://www.ppmy.cn/news/834235.html

相关文章

2022健康元年,送自己或者父母一台能测血压的智能手表吧

现在大家对健康越来越重视&#xff0c;那些能够随时记录各种健康、运动数据的手环手表因此备受欢迎&#xff0c;通过配套的APP&#xff0c;我们可以随时查看自己心率、血氧等方面的数据。最近我发现了一款功能更加强大的智能手表&#xff0c;可以准确测量血压&#xff0c;而且操…

【Android智能定位手表开发】- 文章目录

本项目已开发半年&#xff0c;基本工作已接近80%&#xff0c;是时候做一个系统的经验总结&#xff0c;为了更有动力把这个项目未完成的工作完成和产品完善&#xff0c;直到量产上市&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 总结内容分为十部分&#xff1…

推荐一款安卓软件:爱家定位,及时定位知道老人和小孩的位置防走失

“爱家定位”是一款主要面向家庭成员提供位置服务的手机客户端应用&#xff08;APP&#xff09;。 用户创建家庭群、并邀请家庭成员登录后&#xff0c;可以在地图界面上直观查看家庭中各成员的当前位置、轨迹记录&#xff0c;同时可以设置禁止入、禁止出等各种类型的电子围栏&a…

【Android 碎屑日记(二)】- Jetpack Compose

文章目录 知识回顾前言Compose的优劣势分析Compose提高性能2. 使用LazyColumn、LazyRow等列表组件时&#xff0c;指定key3. 使用 derivedStateOf 限制重组4. 尽可能延迟State的读行为 Compose的底层原理总结 知识回顾 android 14升级新功能介绍&#xff1a; 添加专用 ScreenSh…

哪种室内定位更适合老年人?

目前在人员定位领域&#xff0c;基本运用这几种技术&#xff1a;全球定位系统&#xff08;GPS&#xff09;、蜂窝网络定位&#xff08;基站定位&#xff09;、蓝牙定位、RFID定位、超声波定位、姿态识别技术等。其中我们挑选出三种应用较为广泛的定位技术进行分析对比&#xff…

Caused by: java.lang.ClassNotFoundException: javax.servlet.Filter报错解决

报错&#xff1a; Caused by: java.lang.NoClassDefFoundError: javax/servlet/Filte Caused by: java.lang.NoClassDefFoundError: javax/servlet/Filter at java.lang.Class.getDeclaredMethods0(Native Method) ~[na:1.8.0_191] at java.lang.Class.privateGetDeclaredMetho…

STM32 Proteus仿真ILI9341显示电桥电子秤重量测量差分放大电路 -0062

STM32 Proteus仿真ILI9341显示电桥电子秤重量测量差分放大电路 -0062 Proteus仿真小实验&#xff1a; STM32 Proteus仿真ILI9341显示电桥电子秤重量测量差分放大电路 -0062 功能&#xff1a; 硬件组成&#xff1a;STM32F103R6单片机 ILI9341TFT显示器4个电位器组成的电桥电…

多线程——python进阶知识

多线程与多进程的区别 多线程是单个内核通过锁的手段实现同一时间运行多个程序&#xff0c;在某些情况下可以提升总体的运行效率。同时为了防止多个线程在对同一数据进行修改时导致的不可预测的后果&#xff0c;需要借助锁、队列等保证进程的同步。 多进程是多个内核执行多个…