【Java架构师入门到精通提升】自定义spring

Spring Boot 知识点超详解:从入门到精通,打造企业级 Java 应用 的知识点解析,助您从入门到精通,最终能够运用 Spring Boot 构建出高效、稳定、可扩展的企业级 Java 应用。本文将深入 Spring Boot 的核心,从基础概念到高级应用,进行。Spring Boot,这款由 Pivotal 团队打造的划时代框架,已经成为 Java 后端开发的。,极大地提升了 Java 后端开发的效率,降低了开发门槛。理念,将繁琐的 Spring 应用配置化繁为简,让开发者能够。理解 Spring Boot 的核心概念是掌握其灵魂的关键所在。的企业级 Java 应用。 阅读详情

1.1   描述

在企业级开发中,spring框架应用非常广。为了让已经学习过spring框架同学,可以更深入的理解和应用spring,本文将通过自定义spring,更佳系统的阐述spring核心:IoC、AOP。
       IoC(Inversion of Control)控制反转:将对象的创建权交与spring框架,及将创建权反转给spring框架。IoC主要解决计算机程序的耦合问题。
       AOP(Aspect Oriented Programming)面向切面编程:通过运行期动态代理实现程序功能的统一维护的一种技术。

1.2   分析

l  如果要实现自定义spring,可以将器拆分成多个功能实现。
l  阶段一:编写配置文件,服务器tomcat启动时,加载配置文件
l  阶段二:使用Jsoup解析xml,并封装到指定的JavaBean中
l  阶段三:编写工厂类用于创建指定bean,并完成property注入
l  阶段四:使用@Transactional进行事务管理

1.3   搭建环境

image

1.3.1   javabean

| public class User {

private Integer uid;
   private String username;
   private String password; |

1.3.2    dao

| public interface UserDao {
   /**
    * 保存
    * @param user
    */
   public void save(User user);

} |
| public class UserDaoImpl implements UserDao {

@Override
   public void save(User user) {
      //TODO 暂时只打印
      System.out.println(user);
   }

} |

1.3.3   service

| public interface UserService {
   /**
    * 注册
    * @param user
    */
   public void register(User user);
} |
| public class UserServiceImpl implements UserService {

private UserDao userDao;
   public void setUserDao(UserDao userDao) {
      this.userDao = userDao;
   }

@Override
   public void register(User user) {
      this.userDao.save(user);
   }
} |

1.4   阶段一:编写配置文件,服务器启动加载

1.4.1   xml配置文件

l  在src下添加“applicationContext.xml”,并将dao和service配置到xml文件中。想学习交流HashMap,nginx、dubbo、Spring MVC,分布式、高性能高可用、MySQL,redis、jvm、多线程、netty、kafka、的加尉xin(同英):1253431195 扩列获取java进阶资料学习,无工作经验不要加哦!
l  使用标签配置一个实现类
       class:    配置实现类的全限定名称
       id: 进行唯一命名,用于提供给程序获得
l  使用配置javabean属性的注入
       name:   配置的service的属性名
       ref:       配置其他bean对象的引用

image

| <?xml version=*"1.0"* encoding=*"UTF-8"*?>

   
    <bean id=“userDaoId” class=“cn.itcast.demo.dao.impl.UserDaoImpl”>
   
    <bean id=“userServiceId” class=“cn.itcast.demo.service.impl.UserServiceImpl”>
        <property name=“userDao” ref=“userDaoId”>
   
|

1.4.2   加载配置文件

l  tomcat启动时,加载配置文件方式总结:
       1.编写Servlet,配置servlet,并添加,在init(ServletConfig)初始化方式中加载。
       2.编写Filter,配置filter,在init(FilterConfig)初始化方法中加载
       3.编写Listener,实现接口ServletContext,配置listener,在contextInitialized(ServletContextEvent sce)方法中加载。
l  spring采用listener方案
       1.提供实现类ContextLoaderListener
       2.编写全局初始化参数contextConfigLocation,用于确定xml位置
              classpath:applicationContext.xml 加载类路径下的xml文件
        applicationContext.xml 加载WEB-INF目录的配置文件

l  xml配置

|
   
        contextConfigLocation
        classpath:applicationContext.xml
   


   
        cn.itcast.myspring.listener.ContextLoaderListener
    |

l  实现类

image

| public class ContextLoaderListener implements ServletContextListener {

@Override
    public void contextInitialized(ServletContextEvent sce) {
        // 0 获得ServletContext对象应用
        ServletContext context = sce.getServletContext();
        // 1 加载配置
        String config = context.getInitParameter(“contextConfigLocation”);
        if(config == null){ //默认配置文件位置
            config= “applicationContext.xml”;
        }

InputStream xmlIs = null;
        // 2  处理路径不同情况
        // * classpath:applicationContext.xml --> 表示 src/applicationContext.xml
        // * applicationContext.xml --> 表示 /WEB-INF/applicationContext.xml
        if (config.startsWith(“classpath:”)) { // 2.1 加载 类路径 (classpath、src)下的xml
            xmlIs = ContextLoaderListener.class.getClassLoader().getResourceAsStream(config.substring(“classpath:”.length()));
        } else { //2.2 加载/WEB-INF/目录下的资源
            xmlIs = context.getResourceAsStream("/WEB-INF/" + config);
        }
        //2.3 配置文件必须存在,否则抛异常
        if(xmlIs == null){
            throw new RuntimeException(“资源文件[”+config+"]没有找到");
        }

//TODO 3 解析配置
        if (xmlIs != null) {
            System.out.println(xmlIs);
        }
    }
    @Override
    public void contextDestroyed(ServletContextEvent sce) {
    }
} |

1.5   阶段二:解析xml,并封装到指定javabean中

1.提供Property类,用于封装<property name=" " ref=" ">
2.提供Bean类,用于封装<bean id=" " class=" ">
       一个 标签体中可以配置多个需要一个容器存放,没有顺序要求,且不能重复,选择Set
3.提供BeanFactory类,并在类同提供容器存放多个Bean 类,为了方便获取使用Map。想学习交流HashMap,nginx、dubbo、Spring MVC,分布式、高性能高可用、MySQL,redis、jvm、多线程、netty、kafka、的加尉xin(同英):1253431195 扩列获取java进阶资料学习,无工作经验不要加哦!

image

1.5.1    property javabean

| /**
 * 用于封装 <property name=“userDao” ref=“userDaoId”>
 */
public class Property {

//属性名称
   private String name;
   //另一个bean引用名
   private String ref;

public Property(String name, String ref) {
      super();
      this.name = name;
      this.ref = ref;
   } |

1.5.2    bean  javabean

| public class Bean {

//bean名称
   private String beanId;
   //bean的实现类
   private String beanClass;
   //取值:singleton 单例,prototype 原型(多例)【扩展】
   private String beanType;

//所有的property
   private Set propSet = new HashSet();

public Bean(String beanId, String beanClass) {
      super();
      this.beanId = beanId;
      this.beanClass = beanClass;
   } |

1.5.3    BeanFactory 工厂模式类

| public class BeanFactory {

//////////////////工厂模式////////////////////////
    private static BeanFactory factory = new BeanFactory();
    private BeanFactory(){
    }

/**
     * 获得工厂实例
     * @author lt
     * @return
     */
    public static BeanFactory getInstance() {
        return factory;
    } |

1.5.4    BeanFactory 提供Map 缓存

|     //////////////////缓存所有的Bean/////////////////////////////////
    //bean数据缓存集合 ,key:bean名称 ,value:bean封装对象
    private static Map<String, Bean> beanData;// = new HashMap<String, String>();
    static{
        // 从配置文件中获得相应的数据 1.properties 2.xml
        //beanData.put(“userDao”, “com.itheima.ebs.service.impl.BusinessServiceImpl”);
    }

public static void setBeanData(Map<String, Bean> beanData) {
        BeanFactory.beanData = beanData;
    } |

1.5.5    修改Listener解析xml

l  使用Jsoup解析,导入jar包

image

l  修改contextInitialized 方法

| //TODO 3 解析配置
      if (xmlIs != null) {
         //3.1解析
         Map<String, Bean> data = parserBeanXml(xmlIs);
         //3.2 将解析结果放置到工厂中
         BeanFactory.setBeanData(data);
      } |

l  解析方法parserBeanXml(InputStream)

| /**
    * 将数据解析成bean
    * @param xmlIs
    * @return
    */
   public static Map<String, Bean> parserBeanXml(InputStream xmlIs) {
      try {
         //0提供缓冲区域
         Map<String, Bean> data = new HashMap<String, Bean>();

//1解析文件,并获得Document
         Document document = Jsoup.parse(xmlIs, “UTF-8”, “”);

//2 获得所有的bean元素
         Elements allBeanElement = document.getElementsByTag(“bean”);

//3遍历
         for (Element beanElement : allBeanElement) {
            //5 将解析的结果封装到bean中
            // 5.1 bean名称
            String beanId = beanElement.attr(“id”);
            // 5.2 bean实现类
            String beanClass = beanElement.attr(“class”);

// 5.3 封装到Bean对象
            Bean bean = new Bean(beanId,beanClass);

// 6 获得所有的子元素 property
            Elements allPropertyElement = beanElement.children();
            for (Element propertyElement : allPropertyElement) {
                String propName = propertyElement.attr(“name”);
                String propRef = propertyElement.attr(“ref”);
                Property property = new Property(propName, propRef);

// 6.1 将属性追加到bean中
                bean.getPropSet().add(property);
            }

data.put(beanId, bean);
         }
         return data;
      } catch (Exception e) {
         throw new RuntimeException(e);
      }
   } |

一名合格的Java后端工程师或架构师必须要掌握 Spring Framework、Spring Boot、Spring Cloud 对于Java工程师来说,几乎没有没听过大名鼎鼎的Spring框架的,Spring框架早已成为了Java后端开发事实上的行业标准,可以说,是Spring成就了Java,Spring也成为Java程序员必修课之一。 同时,随着Spring Boot和Spring Cloud的出现,使得开发工程师能更高效的利用Spring和其他基础设施快速搭建系统,Spring全家桶的诞生又一次解放了大家的生产力。 经常有粉丝后台留言有关Spring全家桶学习的问题,大家遇到的困惑无非是这些方面: 1、刚刚入行或转行的兄弟 阅读详情

相关推荐

《成为顶级JAVA架构师的必备书籍》

一、技术类: JAVA、WEB、架构 Java Web,是用Java技术来解决相关web互联网领域的技术总和。web包括:web服务器和web客户端两部分。今天将JAVA、WEB、架构相关的书籍做了一个整理,希望可以帮助大家,提升业务技能。 《分布式Java应用——基础与实践》 《深入分析Java Web技术内幕》 《大型网站系统与Java中间件实践》 《分布式服务框架原...

weixin_44829998的博客 4514

Spring Boot学习笔记(二)

5、Hello World探究 1、POM文件 a、父项目 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version...

qq_40796375的博客 180

Java架构师必备框架技能核心笔记,Java自学教程

金三银四到了,送上一个小福利!金三银四到了,送上一个小福利![外链图片转存中…(img-5tvtyVFu-1710002960381)][外链图片转存中…(img-i1G7nawX-1710002960382)][外链图片转存中…(img-ynNIqX9H-1710002960382)]本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录。

m0_60634964的博客 913

java项目转spring项目_springMVC做的web项目转成springboot web项目的杂谈

文章背景:一个老的web项目是用springMVC做的,最近需要修改一些功能,然后用本地部署的Tomcat启动,启动过程中各种报错,在网上百度半天都是spring版本的问题,纠结了一段时间,终于有了转springboot的想法,不用再管各种版本的兼容问题。项目转换步骤如下:1)创建一个全新的空的springboot 项目2)在pom.xml中添加web相关的依赖org.springframewor...

weixin_39743064的博客 833

Spring Boot 从入门到精通:全栈开发指南

本专栏系统讲解Spring Boot开发,面向1-3年经验的Java开发者。内容涵盖基础入门(项目创建、配置管理)、核心组件(Web开发、数据库/缓存/消息队列整合)、安全监控(认证授权、系统监控)、高级特性(自定义Starter、异步编程)以及性能优化与问题排查。采用"原理分析+代码示例+问题解决方案"的教学模式,每篇均包含实操步骤和常见问题FAQ,帮助开发者深入理解Spring Boot核心机制并解决实际开发难题。通过本专栏,读者可全面掌握Spring Boot技术栈,提升微服务开发

fykam的博客 1153

强化学习赋能宇树机器狗:Isaac Gym与MuJoCo仿真训练全解析

本文详细解析了如何利用Isaac Gym和MuJoCo两大仿真平台为宇树机器狗构建强化学习训练管道。内容涵盖环境配置、模型导入、PPO算法框架设计、奖励函数构建以及从仿真到实机的策略迁移技巧,为开发者提供了一套完整的宇树狗仿真训练实践方案。

zeta9的博客 621

如何将一个普通项目改造成spring boot项目

我这种表述正确吗?我也不清楚,反正就是这么个意思。 话说,我从网上拿了个开源的项目来学习和改造。这是个普普通通的JAVA项目,没有用到spring boot,也没有web。我就想将这些都加进去。 怎么加? 我想了一下,有2种途径: 1、新建一个spring boot项目,然后将现在这个项目的代码移植过去 2、直接在目前这个项目里,把spring boot和WEB加进去 途径1难度应该不大,不过没有...

左直拳的马桶_日用桶 1万+

四阶龙格库塔法求解一次常微分方程组(python实现)

之前在博客发布了关于使用四阶龙格库塔方法求解一次常微分方程组的文章,由于代码缺少具体的验证,部分朋友可能存在疑问,因此这里打算再重新写一篇博客来验证一下程序的正确性,另外,这里是使用python语言来实现的。

HelloWorldTM的博客 8543

使用 Java 初步搭建简单Spring 项目框架:

首先。

2302_78100610的博客 2632

Visual Studio 2013 + Intel(R) Visual Fortran 安装教程

安装了好几遍,ivf都不能加载到vs中,中途放弃了vs,又改用codeblocks编译器,依然在写fortran的时候出现了各种问题,于是又放弃了codeblocks改回vs,总之是折腾了好久,终于装明白了ivf并且将fortran模板成功加载到vs中。 PS:一定要安装Intel Visual Fortran.Composer XE.2013-SP1,不要用Intel Visual Fortr...

Coco_wjy的博客 12万+

基于迁移学习的花卉识别系统

本研究采用了预训练的经典深度学习模型,包括ResNet、AlexNet和VGG,通过微调的方式在Oxford-102数据集和一个自制花卉数据集上进行训练,并对图像进行了多种数据增强操作,以提高模型的泛化能力,致力于实现花卉的高效分类。

m0_71146337的博客 2378

【Java】Spring的创建和使用

1. 操作容器之前,先要有一个容器,所以要先得到容器 2. 存对象 1. 创建Bean(普通类) 2. 将Bean注册到配置文件当中 3. 取对象 1. 得到Spring的上下文,并读取到Spring的配置文件 2. 获取到某一个Bean对象 3. 使用Bean对象

qq_63474430的博客 2028

静态时序分析(Static Timing Analysis, STA):简介及内容导航

静态时序分析(简称STA)是用来验证数字设计时序的技术之一,另外一种验证时序的方法是时序仿真,时序仿真可以同时验证功能和时序。“时序分析”这个术语就是用来指代“静态时序分析“或”时序仿真“这两种方法之一,简单来说,时序分析的目的就是为了解决设计中的各种时序问题。STA被称为静态的原因是其对于设计的分析是静态地执行的,并不依赖于施加在输入端口上的激励。相比之下,时序仿真则可以被视作动态地执行对设计的分析,具体过程描述如下:施加一组激励,观察在这组激励下电路行为是否符合要求,然后换一组激。

Starry__的博客 1993

玩转Spring Boot自定义注解:从入门到精通的5个实战案例

Spring Boot自定义注解是扩展框架功能的强大工具,它能简化代码、提升可维护性,并实现AOP(面向切面编程)等高级特性。本文将通过5个实战案例,从简单入门到精通进阶,逐步教你如何创建和应用自定义注解。描述:注解的作用和场景。实现步骤:使用Spring Boot和Java代码展示。解释:核心原理和注意事项。所有代码基于Spring Boot 3.x和Java 17,确保真实可用。案例难度递增,覆盖日志记录、参数验证、事务管理、安全控制和启动配置。入门。

2501_93895174的博客 567

ROS2与Gazebo协同实现多机器人避障仿真

本文详细介绍了如何利用ROS2与Gazebo协同搭建多机器人避障仿真环境。通过创建SDF机器人模型、编写多机器人启动文件以及集成基础避障算法,构建了一个低成本、高效率的虚拟测试平台,为AGV编队、机器人集群等项目的算法验证与迭代提供了完整解决方案。

weixin_29065659的博客 295

Node-RED教程(一):Node-RED的介绍与安装

最新最全的Node-RED,node-red教程都在这里。 本篇介绍node-red的安装。使用docker 安装node-red

知无涯 3万+

【架构师基础(一)】Java 架构师的角色和职责

在 Java 开发领域,Java架构师扮演着至关重要的角色,他们如同项目的领航员,把控着整个软件系统的架构方向,确保系统的高质量、高性能以及可扩展性。今天,我们就来深入探讨一下Java 架构师的定位、与开发人员的区别以及其所需要掌握的核心技能。

架构师之路 2451

YOLOv8【第十章:多任务扩展深度篇·第19节】YOLOv8 与 DeepLabV3+ 对比——实时性与精度的权衡!

🏆 本文收录于 《YOLOv8实战:从入门到深度优化》 专栏。该专栏系统复现并梳理全网各类 YOLOv8 改进与实战案例(当前已覆盖分类 / 检测 / 分割 / 追踪 / 关键点 / OBB 检测等方向),坚持持续更新 + 深度解析,质量分长期稳定在 97 分以上,可视为当前市面上 覆盖较全、更新较快、实战导向极强 的 YOLO 改进系列内容之一。

**My Coding Family** 1万+

视频教程-Spring框架快速入门到精通-Java

Spring框架快速入门到精通 十年项目开发经验,主要从事java相关的开发...

weixin_32656541的博客 177

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

2024java面试题无需C币下载 打造Java架构师的学习路线:从入门到精通

作为一名Java架构师,你需要掌握全面的Java知识体系和架构设计能力。本文为你提供了一条完整的Java架构师学习路线,从基础知识到高级特性,再到架构设计与框架应用。希望本文能够引发读者的兴趣和积极的互动,让我们一起成长为优秀的Java架构师!如果你对这篇文章感兴趣或有任何问题,请在评论区留言,我将非常乐意与你进行讨论和交流。

赵KK的博客 923

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

【java架构师入门到精通】Spring是什么

Spring 是 Java EE 编程领域的一款轻量级的开源框架,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,它的目标就是要简化 Java 企业级应用程序的开发难度和周期。 Spring 自诞生以来备受青睐,一直被广大开发人员作为 Java 企业级应用程序开发的首选。时至今日,Spring 俨然成为了 Java EE 代名词,成为了构建 Java EE 应用的事实标准。 Spring 的诞生与发展 早期的 J2EE(Java EE 平台)推崇以 EJB 为核心的开发

javase1086的博客 579

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

视频教程-Spring从入门到精通-Java

Spring从入门到精通 擅长SpringBoot、Redis、Dubbo、...

weixin_28785347的博客 285

java架构师进阶之路

包含了计算机基础、算法和数据结构、常用工具、java核心知识、性能优化、基础框架、数据库、消息队列、缓存中间件、搜索引擎、大数据、RPC、网关、容器、面试等知识

henhenha的博客 5843

Java入门到精通22本经典书籍推荐

这本书采用互动和幽默的风格,通过丰富的插图和示例,使初学者能够轻松地掌握Java基础。它用简单易懂的方式介绍了Java的核心概念和语法,非常适合刚刚接触编程的读者。

黑马程序员官方博客 7364
上一篇: 连肝两宿,做出这18张图,彻底让你学会“一致性哈希”
下一篇: 【Java架构师入门到精通提升】论Socket的重要性
蒙塔ta
博客等级 码龄5年 4粉丝 30原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值