【Java复习Ⅲ 11】spring框架:对spring的宏观理解(注入/反射机制)

2021年04月08日 spring宏观介绍

  • 有很多的时候我们学习的只是知识的表层,我们要努力把“了解”变为“精通”。这个系列就是为了记录Java基础梳理。
  • 希望在学习的过程中不是把知识简单的记忆住,更重要的是做到“有趣”,怎么做到呢?将代码理解为构建世界的语言,我们所在的世界的一草一木都可以用代码解释,Java是面向对象的,也是存在于我们的生活的,Java生活就是这个道理。
  • 在以后可能会加一些拓展,
  • 学习理科、技术最依靠的是理解、模型,不断应用,在应用中理解,记忆,才能对知识的理解更上一层。

Spring的组成

spring 2002年发布的,我们可以说“spring配置文件(xml)是spring的灵魂”

spring组件 function
core 核心(bean的管理)
AOP Aspect Oriented Programming 动态代理(总代理销售商对下面的人一视同仁)
ORM Object Relation Mapping (对象关系映射)
DAO Data access Object(数据连接对象)
Context 上下文,前后文(代表当前编程的环境)
Web
WebMVC 独立的框架(springMVC)

Spring框架的几大模块之间相互耦合度很小,因此Spring框架的使用可以根据实际需要选其部分模块循序渐进的使用,而非必须统统照搬。

Spring的原理:

spring框架主要依赖IOC和AOP,完成控制反转和注射,这是spring的主要作用!

  • 【IOC】控制反转 Inversion of Control
    • 正向:A类需要使用B类,new一个B类(Instance)
    • 反向:A类需要只用B类,由spring注入一个B给A
  • 【AOP】可以做很多事务的管理。(类似动态代理、面向的是各个类)
  • 【DIC】通过DIC主要的作用是对象的使用直接向spring要,而不用我们自己创建。

Spring核心思想
控制反转Ioc//Inversion of Control和依赖注射DI/Dependency Injection

【控制反转】
什么叫控制反转呢? 套用好莱坞的一句名言就是:Don’t call me.I will call you. 。什么意思呢?就好比一个皇帝和太监 有一天皇帝想幸某个美女,于是跟太监说,今夜我要宠幸美女,皇帝往往不会告诉太监,今晚几点会回宫,会回哪张龙床,他只会告诉太监他要哪位美女。其它一切都交,由太监去安排,到了晚上皇帝回宫时,自然会有美女出现在皇帝的龙床上。这就是控制反转,而把美女送,到皇帝的寝宫里面去就是注射。太监就是是框架里面的注射控制器类BeanFactory,负责找到美女并送到龙 床上去。整个后宫可以看成是Spring框架,美女就是Spring控制下的JavaBean。
【传统的模式】
就是一个饥渴男去找小姐出台,找领班,帮助给介绍一个云云,于是领班就开始给他张罗。介绍一个合适的给他,完事后,再把小姐还给领班,下次再来。这个过程中,领班就是查询上下文Context,领班的一个职能就是给客户找到他们所要的小姐。这就是lookup()方法,领班手中的小姐名录就 是JNDI//Java Naming and Directory Interface。小姐就是EJB,饥渴男是客户端,青楼是EJB容器。
【区别】
饥渴男去找小姐出台很麻烦,不仅得找,用完后还得把小姐给还回去。而皇帝爽翻了,什么都不用管,交给太监去处理,控制权转移到太监手中去了,而不是皇帝,必要时候由太监给注射进去就可以了。看到Spring的美妙了吧,Spring还提供了与多个主流框架的支持,可以和其它开源框架集成。

spring的控制反转

配置文件

DTD
XSD : Xml Schema Definition(2001年发布,写配置文件xsi里面会有)

  • xmlns ns=namespace
  • xsi == xml schema instance
  • xsi:schemaLocation == 对应的实例的位置(XX 对应 XX.xsd)

applicationContext.xml
(一般都是这个名字作为spring的配置文件)

<beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-4.2.xsd">

    <bean id="queenLiModel" class="com.hzyc.demo.model.Model"/>
    <bean id="queenLiDao" class="com.hzyc.demo.model.dao.Dao"/>
    <bean id="emperor" class="com.hzyc.demo.model.service.Service ">
        <constructor-arg name="model" ref="queenLiModel"/>
        <property name="dao" ref="queenLiDao"/>
    bean>beans>

在spring中管理依赖关系

在这里插入图片描述

测试类:

public class Service {
	//声明我要用的东西
    private Dao dao;
    private Model model;
    
    Service(Model model) {
        this.model = model;
    }
    public void serviceRun() {
        model.setName("小明");
        model.setCode("121");
        System.out.println(model);
        dao.daoRun();
        System.out.println("service结束……");
    }
	//普通的getset方法:
    public Dao getDao() {、 public void setDao(Dao dao) {
    public Model getModel() {、   public void setModel(Model model) {}class test {
    public static void main(String[] args) {
        try {
            //写完这个文件之后就已经完成注入的过程了
            ApplicationContext atx = new ClassPathXmlApplicationContext("applicationContext.xml");

            Service emperor = (Service) atx.getBean("emperor");
            emperor.serviceRun();

            Model queenModel = (Model) atx.getBean("queenLiModel");
            queenModel.setCode("我是queenLiModel");
            System.out.println(queenModel.getCode());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }}

学习笔记

在这里插入图片描述
在这里插入图片描述

优秀的个人博客,低调大师

微信关注我们

原文链接:https://blog.51cto.com/u_15202146/2777540

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

Java Development Kit(Java开发工具)

Java Development Kit(Java开发工具)

JDK是 Java 语言的软件开发工具包,主要用于移动设备、嵌入式设备上的java应用程序。JDK是整个java开发的核心,它包含了JAVA的运行环境(JVM+Java系统类库)和JAVA工具。

Sublime Text 一个代码编辑器

Sublime Text 一个代码编辑器

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。