Spring(1)——Spring概述,第一个Spring

一、Spring概述

1.Spring全家桶

Spring,SpringMVC,Springboot,Springcloud
Spring在2002年左右出现,目的是用于解决企业开发的难度

2.Spring的核心技术:ioc和aop

能实现模块之间和类之间解耦合
依赖:classa中使用classb的属性或方法, 叫做classa依赖classb

二、IOC(控制反转)

1.框架简介和学习

框架是一个其它人写好的软件。

1)知道框架能做什么,比如mybatis用于访问数据库, 对表中的数据执行增删改查。
2)了解框架的语法,框架需要一定的步骤支持才能完成一个功能
3)了解框架的内部实现,框架内部怎么做。原理是什么。
4)通过学习,自己实现一个框架。

2. IoC (Inversion of Control)

Ioc指的是控制反转,Ioc是一个理论,概念,思想。

IoC描述的是:将对象的创建,赋值,管理工作都交给代码之外的容器实现,即对象的创建由其它外部资源完成。

控制:创建对象,给对象的属性赋值以及对象之间的关系管理。

反转:把原来的开发人员管理,创建对象的权限转移给代码之外的容器实现。由容器代替开发人员管理对象。创建对象,给属性赋值。

正转:由开发人员在代码中,使用new 构造方法创建对象, 开发人员主动管理对象。

public static void main(String args[])
{
    
    
	//在代码中创建对象。(正转)
    Student student = new Student(); 
}

容器:容器是一个服务器软件,一个框架(比如spring)

3.为什么要使用 ioc?

使用ioc可以减少对代码的改动,实现不同的功能,同时实现解耦合。

4.java中创建对象的方式:

1.构造方法:new Student()
2.反射机制
3.序列化
4.克隆
5.ioc:容器创建对象
6.动态代理

5.ioc的一个例子(Servlet)

对于Servlet

(1)创建类继承HttpServelt
(2)在web.xml 注册servlet , 使用

<servlet-name> myservlet</servlet-name>
<servelt-class>Servlet.MyServlet</servlet-class>

(3)程序员没有主动创建Servlet对象( MyServlet myservlet = new MyServlet())
(4)这个Servlet对象 是Tomcat服务器创建的,因此Tomcat也称为容器

Tomcat作为容器:里面存放Servlet对象, Listener对象, Filter对象

6.IoC技术的实现

DI 是ioc的技术实现

DI(Dependency Injection):依赖注入,只需要在程序中提供要使用的对象名称就可以,至于对象如何在容器中创建,赋值,查找都由容器实现。

spring使用了di实现了ioc的功能, spring底层使用反射机制创建对象

spring是一个容器,它能管理对象并给属性赋值

6.第一个Spring

SpringIoC,由Spring创建对象

实现步骤
(1)创建Maven项目

(2)加入Spring的依赖,版本5.2.5

<!--Spring的依赖-->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
  <version>5.2.5.RELEASE</version>
</dependency>

加入junit依赖

<!--单元测试-->
<dependency>
  <groupId>junit</groupId>
  <artifactId>junit</artifactId>
  <version>4.11</version>
  <scope>test</scope>
</dependency>

(3)创建类(接口和它的实现类):一个普通的类

接口

package HelloSpring;

public interface Some
{
    
    
    public void doSome();
}

实现类

package HelloSpring;

public class SomeImpl implements Some
{
    
    
    public void doSome()
    {
    
    
        System.out.println("Some.doSome execute");
    }
}

(4)创建Spring需要使用的配置文件
需要声明类的信息,这些类由spring创建和管理

<?xml version="1.0" encoding="UTF-8"?>
<!--
    Spring的配置文件
    1.beans:根标签,Spring把java对象称为bean
    2.spring-beans.xsd 是约束文件,和mybatis指定的dtd是一样的
-->
<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,告诉Spring要创建的类的对象
        id:自定义对象的名称(唯一值),Spring通过这个名称找到对象
        class:类的全限定名称(不能是接口,因为Spring通过反射机制创建类对象)

        Spring完成以下工作:
        SomeImpl some = new SomeImpl();
        Spring将创建好的对象放入Map中,Spring框架中有一个Map专门用于存放对象
        SpringMap.put("some",new SomeImpl())

        注意:一个bean标签声明一个对象
    -->
    <bean id="some" class="HelloSpring.SomeImpl"></bean>
</beans>

(5)测试Spring创建的对象

写在测试类里

package HelloSpring;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest
{
    
    
    @Test
    public void test01()
    {
    
    
        /**
         *
         * Spring创建对象的时机:在创建Spring的容器时,会创建配置文件中所有的对象
         *
         * */
        //使用Spring容器创建的对象

        //1.指定Spring配置文件的名字
        String config = "beans.xml";

        //2.创建ApplicationContext对象,这个ApplicationContext对象用于表示Spring容器
        //可以通过ApplicationContext对象获取想要的对象
        //ClassPathXmlApplicationContext:从类路径中加载Spring的配置文件
        ApplicationContext ac = new ClassPathXmlApplicationContext(config);

        //3.从容器中获取对象
        Some some = (Some)ac.getBean("some");
        //Some.doSome execute
        some.doSome();
    }
}

7.获取容器中对象信息的方法

这里演示了两个方法

@Test
public void test02()
{
    
    
    String config = "beans.xml";
    ApplicationContext ac = new ClassPathXmlApplicationContext(config);
    //获取容器中定义的对象的数量
    int num = ac.getBeanDefinitionCount();
    System.out.println("num = " + num);
    //获取容器中定义的每个对象的名称
    String[] names = ac.getBeanDefinitionNames();
    for(int index = 0;index < names.length;index++)
    {
    
    
        System.out.println(names[index]);
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_46841376/article/details/115056949
今日推荐