Administrator
发布于 2022-09-27 / 69 阅读
0
0

Spring概述、IOC、DI

1. Spring概述

  1. Spring是什么?
    众所周知的是Spring是框架,所以可以将Spring理解为是高度抽取可重用代码的一种设计;具有高度的通用性的半成品软件

  2. Spring的核心关注点:容器的思想(可以管理所有的组件(类));IOC和AOP

  3. Spring的模块划分
    1-1-1664270160271

Test							Spring的单元测试模块
Core Container			核心容器(IOC);黑色代表这部分的功能由哪些jar包组成
AOP+Aspects			   面向切面编程模)
Data(数据访问)	   Spring数据库访问模块
Web							  Spring开发web应用的模块;

2.IOC

  1. IOC是什么?
      IOC:(Inversion(反转) Of Control):控制反转。控制:指资源的获取方式;
     个人理解为IOC是一种思想,其具体的实现则是容器的依赖注入。

    以往主动式:要什么资源都自己创建即可  如:new Object(),
    但复杂对象的创建是比较庞大的工程;所以会比较繁琐,因为涉及到属性的赋值等等
    
    被动式:资源的获取不是我们自己创建,而是交给一个容器来创建和设置;     
     Object ob;
     public void test01(){
        ob.wait();
      }
    

    容器:管理所有的组件(有功能的类);假设,xxxServlet受容器管理,xxxService也受容器管 理;容器可以自动的探查出那些组件(类)需要用到另一写组件(类);容器帮我们创建xxxService对象,并把xxxService对象赋值过去;

总结:容器的作用就是将主动的new资源变为被动的接受资源;
可以将容器理解为是一个婚介所:
 以前找符合自己条件的老婆还得自己去搭讪—>沟通—>约会……等等操作;
 有了婚介所之后呢,你可以直接在婚介所注册会员,然后将你想要找的对象的要求
 给婚介所就行,婚介所自动帮你找到你要求的条件的对象。其中的过程你完全不用关心。

3. DI

Dependency Injection 依赖注入

容器能知道哪个组件(类)运行的时候,需要另外一个类(组件);
容器通过反射的形式,将容器中准备好的xxxService对象注入(利用反射给属性赋值)
到xxxServlet中;只要IOC容器管理的组件,都能使用容器提供的强大功能;

4.HelloWorld

    HelloWorld;(通过各种方式给容器中注册对象(注册会员))
    以前是自己new 对象,现在所有的对象交给容器创建;给容器中注册组件

框架的开发步骤:
1.导包

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.3.22</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.22</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.3.22</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>5.3.22</version>
        </dependency>

2.写配置

		new ---->   XML Configuration Config  -----> Spring Config
 <!--bean标签可以注册一个组件(类,对象)
    class是这个组件的全类名
    id作为这个组价的唯一标识
    -->
    <bean id="person01" class="com.lly.beans.Person">
        <!--   property标签可以为person对象属性赋值
               name指定属性名
               value指定属性值
                -->
        <property name="lastName" value="张三"></property>
        <property name="age" value="20"></property>
        <property name="email" value="person01@gmail.com"></property>
        <property name="gender" value="male"></property>
    </bean>

3.测试

5.结尾

     * 存在的几个问题;
     * 1)、src,源码包开始的路径,称为类路径的开始;
     *      所有源码包里面的东西都会被合并放在类路径里面;
     *      java:/bin/
     *      web:/WEB-INF/classes/
   
     * 几个细节:
     * 1)、ApplicationContext(IOC容器的接口)
     * 2)、给容器中注册一个组件;我们也从容器中按照id拿到了这个组件的对象?
     *      组件的创建工作,是容器完成;
     *      Person对象是什么时候创建好了呢?
     *      容器中对象的创建在容器创建完成的时候就已经创建好了;
     * 3)、同一个组件在ioc容器中是单实例的;容器启动完成都已经创建准备好的;
     * 4)、容器中如果没有这个组件,获取组件?
     *报异常 org.springframework.beans.factory.NoSuchBeanDefinitionException:
     * No bean named 'person03' is defined
     * 5)、ioc容器在创建这个组件对象的时候,(property)会利用setter方法为javaBean的属性
     进行赋值;
     * 6)、javaBean的属性名是由什么决定的?getter/setter方法是属性名决定;set去掉后面
     那一串首字母小写就是属性名;
     *      private String lastName;?
     *      所以所有getter/setter都自动生成,不要改动!

评论