[原创]java WEB学习笔记102:Spring学习---Spring Bean配置:bean配置方式(工厂方法(静态工厂方法 & 实例工厂方法)、FactoryBean) 全类名
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用
内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系。
本人互联网技术爱好者,互联网技术发烧友
微博:伊直都在0221
QQ:951226918
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
全类名方式最简单,最普遍
1.通过调用静态工厂方法创建 Bean
1)调用静态工厂方法创建 Bean是将对象创建的过程封装到静态方法中. 当客户端需要对象时, 只需要简单地调用静态方法, 而不同关心创建对象的细节.
2)要声明通过静态方法创建的 Bean, 需要在 Bean 的 class 属性里指定拥有该工厂的方法的类, 同时在 factory-method 属性里指定工厂方法的名称. 最后, 使用 <constrctor-arg> 元素为该方法传递方法参数.
- StaticCarFactory
- package com.jason.spring.beans.factory;
- import java.util.HashMap;
- import java.util.Map;
- /**
- *
- * @ClassName:StaticCarFactory
- * @Description:
- * 静态工程方法:直接调用一个类的静态方法就可以放回bean 的实例
- *
- */
- public class StaticCarFactory {
- private static Map<String, Car> cars = new HashMap<String, Car>();
- static{
- cars.put("audi", new Car("audi", 300000));
- cars.put("ford", new Car("ford", 400000));
- }
- //静态工场方法
- public static Car getCar(String name){
- return cars.get(name);
- }
- }
Car
- package com.jason.spring.beans.factory;
- public class Car {
- private String brand;
- private double price;
- public String getBrand() {
- return brand;
- }
- public void setBrand(String brand) {
- this.brand = brand;
- }
- public double getPrice() {
- return price;
- }
- public void setPrice(double price) {
- this.price = price;
- }
- @Override
- public String toString() {
- return "Car [brand=" + brand + ", price=" + price + "]";
- }
- public Car(String brand, double price) {
- super();
- this.brand = brand;
- this.price = price;
- }
- }
beans-factory.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 ,不是配置静态工程方法实例,而是配置bean 实例 -->
- <!--
- class 属性:指向静态方法的全类名
- factory-method:指向静态工厂方法的名字
- constructor-arg:如果工场方法需要传入参数,则使用constructor-arg 指定参数
- -->
- <bean id="car1" class="com.jason.spring.beans.factory.StaticCarFactory" factory-method="getCar">
- <constructor-arg value="audi"></constructor-arg>
- </bean>
- </beans>
2.实例工场方法
- InstanceCarFactory
- package com.jason.spring.beans.factory;
- import java.util.HashMap;
- import java.util.Map;
- /**
- *
- * @ClassName:InstanceCarFactory
- * @Description:
- *
- * 实例工工厂方法:实例工厂的方法,即需要创建工场本身,再调用工场的方法返回bean的实例
- */
- public class InstanceCarFactory {
- private Map<String, Car> cars = null;
- public InstanceCarFactory(){
- cars = new HashMap<String, Car>();
- cars.put("audi", new Car("audi", 300000));
- cars.put("ford", new Car("ford", 500000));
- }
- public Car getCar(String brand){
- return cars.get(brand);
- }
- }
bean-factory.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="instanceCarFactory" class="com.jason.spring.beans.factory.InstanceCarFactory" ></bean>
- <!-- 通过实例工厂方法来配置bean -->
- <!--
- factory-bean 属性:指向实例工厂的方法的bean
- factory-method:指向实例工厂方法的名字
- constructor-arg:如果工场方法需要传入参数,则使用constructor-arg 指定参数
- -->
- <bean id="car2" factory-bean="instanceCarFactory" factory-method="getCar">
- <constructor-arg value="ford"></constructor-arg>
- </bean>
- </beans>
3.FactoryBean
1)实现 FactoryBean 接口在 Spring IOC 容器中配置 Bean
2)Spring 中有两种类型的 Bean, 一种是普通Bean, 另一种是工厂Bean, 即FactoryBean.
3)工厂 Bean 跟普通Bean不同, 其返回的对象不是指定类的一个实例, 其返回的是该工厂 Bean 的 getObject 方法所返回的对象
- CarFactoryBean
- package com.jason.spring.beans.factory;
- import org.springframework.beans.factory.FactoryBean;
- public class CarFactoryBean implements FactoryBean<Car>{
- //自定义的FactoryBean 需要实现 FactoryBean 接口
- private String brand;
- public void setBrand(String brand) {
- this.brand = brand;
- }
- //返回bean 对 象
- @Override
- public Car getObject() throws Exception {
- return new Car(brand, 50);
- }
- @Override
- public Class<?> getObjectType() {
- return Car.class;
- }
- @Override
- public boolean isSingleton() {
- return true;
- }
- }
- <!-- 通过FactoryBean 类配置bean的实例
- class: 指向FatoryBean 的全类名
- property:配置FactoryBean 的属性
- 但实际返回的是:FatoryBean 的getObject() 方法返回的实例
- -->
- <bean id="car3" class="com.jason.spring.beans.factory.CarFactoryBean">
- <property name="brand" value="audi"></property>
- </bean>
[原创]java WEB学习笔记102:Spring学习---Spring Bean配置:bean配置方式(工厂方法(静态工厂方法 & 实例工厂方法)、FactoryBean) 全类名的更多相关文章
- [原创]java WEB学习笔记95:Hibernate 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记75:Struts2 学习之路-- 总结 和 目录
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Spring框架学习笔记(5)——Spring Boot创建与使用
Spring Boot可以更为方便地搭建一个Web系统,之后服务器上部署也较为方便 创建Spring boot项目 1. 使用IDEA创建项目 2. 修改groupid和artifact 3. 一路n ...
- Spring实战第四章学习笔记————面向切面的Spring
Spring实战第四章学习笔记----面向切面的Spring 什么是面向切面的编程 我们把影响应用多处的功能描述为横切关注点.比如安全就是一个横切关注点,应用中许多方法都会涉及安全规则.而切面可以帮我 ...
- 【SSM】学习笔记(一)—— Spring入门
原视频:https://www.bilibili.com/video/BV1Fi4y1S7ix?p=1 P1~P42 目录 一.Spring 概述 1.1.Spring 家族 1.2.Spring 发 ...
- Spring框架学习笔记(8)——spring boot+mybatis plus+mysql项目环境搭建
之前写的那篇Spring框架学习笔记(5)--Spring Boot创建与使用,发现有多小细节没有提及,,正好现在又学习了mybatis plus这款框架,打算重新整理一遍,并将细节说清楚 1.通过I ...
- 学习笔记:CentOS7学习之十九:Linux网络管理技术
目录 学习笔记:CentOS7学习之十九:Linux网络管理技术 本文用于记录学习体会.心得,兼做笔记使用,方便以后复习总结.内容基本完全参考学神教育教材,图片大多取材自学神教育资料,在此非常感谢MK ...
- 五大 JAVA Web 框架的优缺点对比,Spring MVC 领先
毫无疑问,Java 是当今世界上最重要的编程语言之一.js 框架给程序员提供了 一个可以构建程序的坚实基础.它包括定义的类和功能,用于硬件设备管理,与系统软件交互并处理输入,让开发人员变得更轻松.Ja ...
- 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用
目录 学习笔记:CentOS7学习之二十一: 条件测试语句和if流程控制语句的使用 21.1 read命令键盘读取变量的值 21.1.1 read常用见用法及参数 21.2 流程控制语句if 21.2 ...
随机推荐
- node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用提高nodejs调试效率
在开发或调试Node.js应用程序的时候,当你修改js文件后,总是要按下CTRL+C终止程序,然后再重新启动,即使是修改一点小小的参数,也 总是要不断地重复这几个很烦人的操作.这是因为Node.js ...
- android-数据存储之手机内部file存储
一.基础概要 1.说明: 1>应用程序运行需要一些较大的数据或者图片可保存在手机内部 2>文件类型:任意 3>路径:/data/data/packageName/files/ 4&g ...
- 无法分配超出32(XXX)的MINEXTENTS报错的解决方法
今天在创建新表的时候,遇到该报错:ORA-01659 无法分配超出32(XXX)的MINEXTENTS 解决方法:修改表空间大小. 命令如下: ALTER DATABASE DATAFILE ''D: ...
- FTP目录或文件名有中文时导致,下载失败的问题
在FTPClient ftpClient = new FTPClient()代码后, ftpClient.connect(url,port)代码前, 调用ftpClient.setAutodetect ...
- 自动解析URL
function parseURL(url) { var a = document.createElement('a'); a.href = url; return { source: url, pr ...
- iOS frame从导航栏下面开始
iOS7.0 之后,页面布局默认延伸到了手机界面的边缘;导航栏背景成透明颜色. 解决fram从导航栏下面开始方法: 第一种: 将导航栏改成不透明即可 if( ([[[UIDevice currentD ...
- 【转】NumPy-快速处理数据
2.0 简介 标准安装的Python中用列表(list)保存一组值,可以用来当作数组使用,不过由于列表的元素可以是任何对象,因此列表中所保存的是对象的指针(为了保存各种类型的对象,只能牺牲空间).这样 ...
- ServletConfig对象和它在开发中的应用场
package cn.itcast; import java.io.IOException; import java.io.PrintWriter; import java.util.Enumerat ...
- JS写的CRC16校验算法
var CRC = {}; CRC.CRC16 = function (data) { var len = data.length; if (len > 0) { var crc = 0xFFF ...
- Solved Unable to copy the source file ./installer/services.sh to the destination file /etc/vmware-t
Sometimes when you intall vmwaretools there will be some problems such as "Unable to copy the s ...