JavaEE第二课-Spring框架-控制反转


前言

Spring是一个轻量级的框架


一、Spring体系结构介绍

四大框架:SpringIOC,SpringMVC,JDBC,SpringAOP
先来学SpringIOC:
问题:能不能做到不修改MyServlet任何代码 实现用户名查询切换
解决方案:
1.把类名写到一个配置文件
2.MyServlet通过代码去读配置文件,反射可以动态的创建对象(提供类名)
Spring框架(控制反转IOC)帮我们完成了1+2

二、使用Spring框架

1.导包

导入目录:
在这里插入图片描述

导入地点:
在这里插入图片描述

导入代码:

<!--    SpringIOC依赖包-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.3.22</version>
    </dependency>

学习1:控制反转(IOC):

现在要创建一个配置文件
在这里插入图片描述

在创建的xml文件中写入如下代码:

在这里插入图片描述

<!--    配置类名  Spring创建对象-->
    <bean class="org.example.dao.impl.UserDaoImpl" id="userDao" scope="prototype">

    </bean>

在app文件中,写入如下代码:
在这里插入图片描述

//        UserDao userDao = new UserDaoImpl();
//        读配置文件,并把配置文件中配的读到的类名创建该对象
        ApplicationContext applicationContext =
            new ClassPathXmlApplicationContext("applicationContext.xml");

//        里氏替换原则
//        单例模式(创建同一个对象)
        UserDao userDao = (UserDao) applicationContext.getBean("userDao");
        System.out.println(userDao.findUser());

学习笔记:

控制反转IOC:
在使用Spring框架后,对象的实例不再由调用者创建,而是由Spring容器来创建,Spring容器会负责控制程序之间的关系,而不是由调用者的代码直接控制。这样,控制权由应用代码转移到了Spring容器,控制权发生了反转,这就是控制反转。

Spring作用域:
在这里插入图片描述

学习2:依赖注入(DI):

例一:

在app中,输入以下代码:

//        一般不直接调用dao -> 通过service来调用dao

        UserDao userDao = (UserDao) applicationContext.getBean("userDao");
        UserService userService = (UserService) applicationContext.getBean("userService");
//        userService.setUserDao(userDao);

        System.out.println(userService.findUser());

而在配置文件中,输入一下代码:

    <bean class="org.example.service.UserService" id="userService">
<!--        对象间的关联关系-->
        <property name="userDao" ref="userDao"/>
    </bean>

其中的ref标签通过其中的值找到userDao,并替代,这样,就不需要在app类中setUserDao了

还有另外一种方法:

    <bean class="org.example.service.UserService" id="userService" autowire="byName">
<!--        对象间的关联关系-->
<!--        <property name="userDao" ref="userDao"/>-->
    </bean>

使用autowire="byName"标签来以id来匹配(自动装配)

例二:

控制文件:

    <bean class="org.example.Person" id="person">
        <property name="age" value="20"/>
        <property name="name" value="testname"/>
    </bean>

person类:

package org.example;

public class Person {
    private String name;
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

app中:

        Person person = (Person) applicationContext.getBean("person");
        System.out.println(person.getAge());
        System.out.println(person.getName());

学习笔记:

依赖注入(DI):
从Spring容器角度来看,Spring容器负责将被依赖的对象复制给调用者的成员变量,相当于为调用者注入它所依赖的实例,这就是Spring的依赖注入。

自动装配:
在这里插入图片描述

学习3:注解:

person类中:

package org.example;


import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;


//Component Spring 容器创建对象
//注解默认不生效 -> 开启注解
@Component
public class Person {

    @Value("20")
    private String name;

    @Value("TestName")
    private int age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;`在这里插入代码片`
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

配置文件中(开启注解):

<?xml version="1.0" encoding="UTF-8"?>
<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.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="org.example"/>

app中:

        ApplicationContext applicationContext =
            new ClassPathXmlApplicationContext("applicationContext.xml");
        Person person = (Person) applicationContext.getBean("person");
        System.out.println(person.getAge());
        System.out.println(person.getName());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值