零基础SSM入门教程(6)--让周杰伦和林俊杰来给我们做代言(详解Spring中使用xml定义bean时到底发生了啥)

本文主要是介绍零基础SSM入门教程(6)--让周杰伦和林俊杰来给我们做代言(详解Spring中使用xml定义bean时到底发生了啥),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

点此查看 零基础JavaWeb全栈文章目录及源码下载

本文目录

  • 1. 背景
  • 2. 容器还不存在
  • 3. 空的容器
  • 4. 要办年会,搞什么节目捏
  • 5. 确定邀请哪些歌手
  • 6. 嗨!唱起来
  • 7. 人治改法治是巨大进步
  • 8. 元数据

1. 背景

之前讲过了如何使用xml定义spring容器中的bean,简简单单几行代码就可以实现,但是后面的道理可没那么简单,今天咱们就来好好絮叨絮叨,xml定义bean时到底发生了啥。

2. 容器还不存在

最开始的时候,我们使用xml定义下我们的容器,但是容器中啥也没有。

<?xml version="1.0" encoding="UTF-8"?><!-- spring.xml文件-->
<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"><!-- 容器中啥也没有 -->
</beans>

注意此时程序都没运行,所以内存中是混沌状态,如下:
图片描述

3. 空的容器

当我们运行下面一行代码时,spring框架就会为我们生成一个容器,因为spring.xml中并未定义bean,所以这时候会生成一个空的容器,里面没有任何bean(对象),context实际上就是指向容器的引用。

package org.maoge.xmlbeandetail;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {public static void main(String[] args) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/org/maoge/xmlbeandetail/spring.xml");//注意,说的就是这一行}
}

总结下,上面一行代码的意思就是根据spring.xml的定义,生成一个容器对象context,此时内存中的状态如下:

图片描述

4. 要办年会,搞什么节目捏

要么就唱歌、要么就请几个讲相声的,最后领导拍板还是请歌手吧。来定义一个歌手类如下,普普通通的歌手类,没啥好说的。

package org.maoge.xmlbeandetail;
public class Singer {private String name;public void sing() {System.out.println("歌手[" + name + "]开唱啦,快挥舞起你手中的荧光棒吧");}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

此时容器中依然还是空的哦!世界上虽然有很多歌手,但是到目前为止跟咱们的容器没有任何关系!

5. 确定邀请哪些歌手

要请歌手,公司员工中80/90后居多,经过全体员工投票,最后得分最高的是周杰伦和林俊杰。本公司真是土豪啊有钱啊牛X啊,为何如此厉害?(PS:主要是程序里面随便定义个数字赋值个几百万上亿都是小事,哈哈,程序员的世界程序员就是无敌!)

OK,我们在容器中定义一下要请的对象。

<?xml version="1.0" encoding="UTF-8"?><!-- spring.xml文件 -->
<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="zhoujielun" class="org.maoge.xmlbeandetail.Singer"><property name="name" value="周杰伦"></property></bean><bean id="linjunjie" class="org.maoge.xmlbeandetail.Singer"><property name="name" value="林俊杰"></property></bean>
</beans>

当再次运行ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext( "/org/maoge/xmlbeandetail/spring.xml");这一行代码时,spring框架会扫描spring.xml文件,发现已经配置了两个Singer类的对象,所以在容器生成时里面会添加两个对象,如下图:
图片描述

6. 嗨!唱起来

万事俱备,只欠东风了,行动起来。

package org.maoge.xmlbeandetail;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {public static void main(String[] args) {ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("/org/maoge/xmlbeandetail/spring.xml");// 杰伦来了Singer zhoujielun = context.getBean("zhoujielun", Singer.class);zhoujielun.sing();// 俊杰来了Singer linjunjie = context.getBean("linjunjie", Singer.class);linjunjie.sing();}
}

此时就是让内存中对象执行它们的方法就行了:
图片描述

7. 人治改法治是巨大进步

通过xml文件定义容器和容器中的对象及对象的属性信息,然后启动容器时就会自动加载对象了,对象的整个生命周期由容器管理。对象的生成由程序员控制变为了容器控制,就像传说中的人治改为按文件规定(xml),非常规范,实际上好处多多,后续大家会慢慢体会到的!

8. 元数据

实际上xml的数据是一种描述和定义,用来向Spring容器提供配置定义相关的信息,这种数据被称为元数据。

元数据可以是任意形式,例如xml、json、二进制数据都可以,只要能描述清楚信息就可以了。

Spring框架目前支持三种元数据:xml、annotation(注解)、java config(java配置),实际上就是三种描述Spring容器内信息的数据格式,可以根据用户自己的喜爱或者需要灵活使用。

就像出行,你既可以乘飞机也可以坐高铁,如果你开心,骑共享单车也不错。

而我,喜欢自驾游,老弟,稳!

这篇关于零基础SSM入门教程(6)--让周杰伦和林俊杰来给我们做代言(详解Spring中使用xml定义bean时到底发生了啥)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/751913

相关文章

JVM 的类初始化机制

前言 当你在 Java 程序中new对象时,有没有考虑过 JVM 是如何把静态的字节码(byte code)转化为运行时对象的呢,这个问题看似简单,但清楚的同学相信也不会太多,这篇文章首先介绍 JVM 类初始化的机制,然后给出几个易出错的实例来分析,帮助大家更好理解这个知识点。 JVM 将字节码转化为运行时对象分为三个阶段,分别是:loading 、Linking、initialization

Spring Security 基于表达式的权限控制

前言 spring security 3.0已经可以使用spring el表达式来控制授权,允许在表达式中使用复杂的布尔逻辑来控制访问的权限。 常见的表达式 Spring Security可用表达式对象的基类是SecurityExpressionRoot。 表达式描述hasRole([role])用户拥有制定的角色时返回true (Spring security默认会带有ROLE_前缀),去

浅析Spring Security认证过程

类图 为了方便理解Spring Security认证流程,特意画了如下的类图,包含相关的核心认证类 概述 核心验证器 AuthenticationManager 该对象提供了认证方法的入口,接收一个Authentiaton对象作为参数; public interface AuthenticationManager {Authentication authenticate(Authenti

Spring Security--Architecture Overview

1 核心组件 这一节主要介绍一些在Spring Security中常见且核心的Java类,它们之间的依赖,构建起了整个框架。想要理解整个架构,最起码得对这些类眼熟。 1.1 SecurityContextHolder SecurityContextHolder用于存储安全上下文(security context)的信息。当前操作的用户是谁,该用户是否已经被认证,他拥有哪些角色权限…这些都被保

Spring Security基于数据库验证流程详解

Spring Security 校验流程图 相关解释说明(认真看哦) AbstractAuthenticationProcessingFilter 抽象类 /*** 调用 #requiresAuthentication(HttpServletRequest, HttpServletResponse) 决定是否需要进行验证操作。* 如果需要验证,则会调用 #attemptAuthentica

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

Java架构师知识体认识

源码分析 常用设计模式 Proxy代理模式Factory工厂模式Singleton单例模式Delegate委派模式Strategy策略模式Prototype原型模式Template模板模式 Spring5 beans 接口实例化代理Bean操作 Context Ioc容器设计原理及高级特性Aop设计原理Factorybean与Beanfactory Transaction 声明式事物

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数