JAVA01_30学习总结(Spring入门)

news/2025/2/23 2:41:50/

今日内容

1. Spring引入

Spring是用来解耦的专用框架和工具,代替普通new的方式,利用反射!

2. 简单工厂模式

简单工厂模式-静态方法工厂模式该工厂模式的核心思想就是-利用配置文件的键值对特性,利用反射来获取需要的对象,不在使用new的方式,进行解耦!步骤1)构造方法私有化,让外界不能直接new来访问2)书写配置文件,将接口和对应的实现类的全限定名称形成键值对3)读取配置文件的内容,放进属性列表,通过获取键来读取值4)利用值,通过反射来获取该实现类的对象!总结-看似步骤书写复杂变多,但是符合书写规范-低耦合,高内聚!
package com.szr.factory;
​
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
​
public class beanFactory {private beanFactory(){}
​public static Object getBean(String pkey){//需要在配置文件中查找的键名称try {//读取配置文件内容InputStream input = beanFactory.class.getClassLoader().getResourceAsStream("bean.properties");//创建属性列表Properties prop = new Properties();//加载读取内容prop.load(input);//通过键(接口名称)获取对应的值(实现类的全限定名称)String str = prop.getProperty(pkey);//反射的方式获取实现类的对象Class clazz = Class.forName(str);Object obj = clazz.newInstance();return obj ;} catch (IOException | ClassNotFoundException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return null;}
}
​
#配置文件-将接口和对应的实现类的全限定名称对应
userService=com.szr.service.Impl.userServiceImpl
package com.szr.service;
//接口
public interface userService {String getMessage();
}package com.szr.service.Impl;
​
import com.szr.service.userService;
//实现类
public class userServiceImpl implements userService {@Overridepublic String getMessage() {return "拿到信息了" ;}
}package com.szr.springTest;
​
import com.szr.factory.beanFactory;
import com.szr.service.userService;
import org.junit.Test;
//测试类
public class springTest {@Testpublic void springtest(){//调用工厂方法获取对应的输入的接口的实现类对象userService ser = (userService) beanFactory.getBean("userService");//调用实现类方法String message = ser.getMessage();System.out.println(message);//拿到信息了}
}
简单工厂模式-静态方法工厂模式通过dom4j技术解析xml文件获取实现类对象步骤1)首先配置xml文件自定义标签跟标签只能有一个子标签-id:子标签唯一标识,接口首字母小写-class:当前接口实现类的全限定名称2)构造方法私有化,外界无法通过new来访问3)创建解析器对象4)解析器读取流内容(xml文件)获取文档对象5)通过文档对象获取xml文件中的根节点对象6)通过根节点对象调用xpath(xml文件路径语言)中的方法获取指定的单个节点//  -   不分层级关系选中的节点bean    -   选中的bean标签[]  -   xxx的bean标签@   -   指定属性名称7)获取当前实现类的全限定名称8)创建当前实现类实例(获取对象)
<?xml version="1.0" encoding="UTF-8" ?>
<!--唯一根节点标签-->
<beans><!--子标签 id唯一标识  class全限定名称  类似于键值对--><bean id="userService" class="com.szr.service.Impl.userServiceImpl"></bean><!--子标签可以有很多...-->
</beans>
package com.szr.factory;
​
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.SAXReader;
​
import java.io.InputStream;
​
public class beanFactoryXml {//构造方法私有化private beanFactoryXml(){}//提供公共方法来访问,通过dom4j技术来解析xml文件public static Object getBeanXml(String beanId){//输入xml文件中唯一标识,来解析对应的内容try {//创建解析器SAXReader reader = new SAXReader();//解析类路径,获取文档对象//读取xml文件InputStream input = beanFactoryXml.class.getClassLoader().getResourceAsStream("bean.xml");//解析器读取流内容获取文档对象Document document = reader.read(input);//通过文档对象获取根节点对象Element rootElement = document.getRootElement();/*通过文档对象调用xpath(xml文件路径语言)的方法获取指定的单个节点// -  不分层级关系选中的节点bean   -  选中的bean标签[] -  xxx的bean标签@  -  指定属性名称*/Element element = (Element) rootElement.selectSingleNode("//bean[@id='" + beanId + "']");//获取找到的对应的子节点的对应的内容--class中的内容-全限定名称String value = element.attributeValue("class");//利用全限定名称通过反射创建对象Class clazz = Class.forName(value);Object obj = clazz.newInstance();//返回得到的结果对象return obj ;} catch (DocumentException | ClassNotFoundException e) {e.printStackTrace();} catch (InstantiationException e) {e.printStackTrace();} catch (IllegalAccessException e) {e.printStackTrace();}return null;}
}

3. Spring方式

Spring方式创建实现类对象-便捷快速方便步骤1)配置xml配置文件-spring版本2)创建Spring容器3)读取配置文件4)创建当前bean对象5)调用方法!
<?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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><!--管理bean对象的创建--><!--配置多个bean标签id必须唯一:代表这个class后面类的全限定名称的标书--><bean id="userService" class="com.szr.service.Impl.userServiceImp" ></bean>
</beans>
@Test
public void SpringTest(){//创建spring容器,读取spring.xml文件ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");//创建当前bean对象-底层-通过唯一标识id获取class全限定名称-通过反射创建对象userService userservice = (userService) context.getBean("userService");//调用方法String message = userservice.getMessage();System.out.println(message);//拿到信息了
}


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

相关文章

(dfs模板)使用dfs算法时没有对回溯时的状态量进行恢复

模板&#xff1a; vector<int> path; vector<vector<int>> result; void backTracking(......) { if (......) { ...... return; } for (int i 0; i < size; i) { path.emplace_b…

torchvision

tochvision是pytorch中用于图像处理的库。 torchvision由以下部分组成&#xff1a; torchvision.datasets&#xff1a;加载数据集 torchvision.models&#xff1a;提供训练模型 torchvision.transforms&#xff1a;图形变换方法&#xff08;裁剪&#xff0c;转向等&#xf…

压缩包文件如何设置和删除密码

压缩软件除了可以压缩和解压文件&#xff0c;还可以作为加密软件&#xff0c;给压缩的文件设置密码来保护文件。 今天就来看下两个常用的压缩软件是如何设置和删除密码的。 先说说WinRAR这个最常用的压缩软件&#xff0c;它可以根据不同的需求设置单次密码和永久自动加密。 …

uniapp项目

目录 一、HBuilder创建项目 二、引入uView 2.1 npm方式安装 2.2 下载方式安装 三、小程序的分包 三、App.vue中的生命周期 四、工具封装 五、api接口请求封装 六、store 七、加载顺序 八、flex的使用 一、HBuilder创建项目 文件--新建--项目--默认模板--Vue2--创建 …

C++11 入门

作者&#xff1a;小萌新 专栏&#xff1a;C进阶 作者简介&#xff1a;大二学生 希望能和大家一起进步&#xff01; 本篇博客简介&#xff1a;介绍C11的一些背景知识 本篇博客主要是讲解一些关键字 C11前言C11诞生简介列表初始化{}初始化关键字autodecltypenullptr范围forSTL的更…

【网络安全】记一次红队渗透实战项目

前言 【一一帮助安全学习&#xff08;网络安全面试题学习路线视频教程工具&#xff09;一一】 一、信息收集 信息收集非常重要&#xff0c;有了信息才能知道下一步该如何进行&#xff0c;接下来将用nmap来演示信息收集 1、nmap扫描存活IP 由于本项目环境是nat模式需要项目…

IronWebScraper for .NET 2023.1 Crack

用于从 HTML Web 应用程序中提取干净的结构化数据的 C# 框架。 IronWebScraper for .NET 2023 &#xff1a;Adds support for Microsoft .NET 6 and .NET 7.January 27, 2023 - 17:25 New Version &#xff1a;&#xff1a;&#xff1a; Added support for Microsoft .NET 6 an…

java ssm校园勤工俭学助学志愿者兼职系统 idea maven

本论文主要论述了如何使用JSP技术开发一个校园勤工俭学兼职系统&#xff0c;本系统将严格按照软件开发流程进行各个阶段的工作&#xff0c;采用B/S架构&#xff0c;面向对象编程思想进行项目开发。在引言中&#xff0c;作者将论述校园勤工俭学兼职系统的当前背景以及系统开发的…