Java学习笔记-spring-Bean实例化
时间:2022-07-24
本文章向大家介绍Java学习笔记-spring-Bean实例化,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
零、bean 实例化方式
- 构造器实例化 (常用)
- 静态工厂实例化
- 实例工厂实例化
一、构造器实例化
Spring 容器通过Bean 对应类中默认无参构造方法来实例化Bean。
//Bean1.java
package com.itheima.instance.constructor;
public class Bean1 {
}
<!--beans1.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">
<!--
id: Bean唯一标识符;
class:Bean实例具体实现类,必须是一个完整类名,使用类的全限定名
-->
<bean id="bean1" class="com.itheima.instance.constructor.Bean1"/>
</beans>
//InstanceTest1
package com.itheima.instance.constructor;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class InstanceTest1 {
public static void main(String[] args) {
//配置文件路径
String xmlPath = "com/itheima/instance/constructor/beans1.xml";
//加载配置文件
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
//实例化Bean
Bean1 bean = (Bean1) applicationContext.getBean("bean1");
System.out.println(bean);
}
}
二、静态工厂实例化
创建一个静态工厂类来创建Bean的实例,Bean配置中的class属性所指定的不再是Bean实例实现的类,而是静态工厂类,同时还需要使用 factory-method 属性指定所创建的静态工厂方法。
//bean2.java
package com.itheima.instance.static_factory;
public class Bean2 {
}
//MyBean2Factory.java
package com.itheima.instance.static_factory;
public class MyBean2Factory {
public static Bean2 createBean() {
return new Bean2();
}
}
<!--bean2.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">
<!--
class:静态工厂类完全限定名
factory-method:定义所需的工厂方法
-->
<bean id="bean2"
class="com.itheima.instance.static_factory.MyBean2Factory"
factory-method="createBean"/>
</beans>
//InstanceTest2
package com.itheima.instance.static_factory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class InstanceTest2 {
public static void main(String[] args) {
String xmlPath = "com/itheima/instance/static_factory/beans2.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
System.out.println(applicationContext.getBean("bean2"));
}
}
三、实例化工厂实例化
配置文件中需要实例化的Bean通过 factory-bean 属性指向配置的实例工厂,然后使用 factory-method 确定使用的是工厂中的哪个方法。
//Bean3.java
package com.itheima.instance.factory;
public class Bean3 {
}
//MyBean3Factory.java
package com.itheima.instance.factory;
public class MyBean3Factory {
public MyBean3Factory() {
System.out.println("bean3 工厂实例化中");
}
public Bean3 createBean() {
return new Bean3();
}
}
<!--bean3.xml-->
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xis="http://www.w3.org/2001/XMLSchema-instance"
xis:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--配置工厂-->
<bean id="myBean3Factory" class="com.itheima.instance.factory.MyBean3Factory"/>
<!--配置实例工厂和使用的方法-->
<bean id="bean3" factory-bean="myBean3Factory" factory-method="createBean"/>
</beans>
//InstanceTest3.java
package com.itheima.instance.factory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class InstanceTest3 {
public static void main(String[] args) {
String xmlPath = "com/itheima/instance/factory/beans3.xml";
ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlPath);
System.out.println(applicationContext.getBean("bean3"));
}
}
本节源码下载地址: https://pan.baidu.com/s/1gbHdTRGozS4MHMFivaO9jw 提取码:gr6m https://download.csdn.net/download/gangzhucoll/11014530
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Linux系统下利用C程序输出某进程的内存占用信息
- .NET Standard中配置TargetFrameworks输出多版本类库
- .NET Standard SDK 样式项目中的目标框架
- 偿还技术债(2)-EventBus自己实现一个?
- AkShare-债券数据-收盘收益率曲线
- Vue 项目报错:‘$‘ is not defined ( no-undef )
- SpringBoot 项目开启热部署
- 小程序文件下载并保存文件名打开
- 分享个 CTF 小工具 bruteHASH
- centos配置mutt和msmtp实现邮件发送
- CentOS8 安装 jdk8 / java8的教程(推荐)
- Ubuntu18.04 一键升级Python所有第三方包 及安装python包的方法
- 详解centos7上elastic search安装及填坑记
- Linux利用Sysctl命令调整内核参数
- 在ubuntu16.04上创建matlab的快捷方式(实现方法)