Spring的创建与Bean的存储和获取

Spring 是什么 ?

spring 是包含了众多工具方法的 loC 容器

什么是 IoC 容器 ?

IoC = Inversion of Control 翻译成中⽂是“控制反转”的意思,也就是说 Spring 是⼀个“控制反转”的容器 .

  • 控制权反转

对象的生命周期,不由程序员(或当前代码片段控制) , 而由 spring (ioc 容器)来控制
IoC 优点 : 实现解耦合

  • DI依赖注入 :

指的是在程序运行期间 , 动态的将依赖对象获取到的过程 .

为解决传统开发中的缺陷

假如,我们现在构建⼀辆“⻋”的程序,我们的实现思路是这样的:

构建⼀辆⻋(Car Class),然⽽⻋需要依赖⻋身(FrameWork Class),⽽⻋身需要依赖底盘(Bottom Class),⽽底盘需要依赖轮胎(Tire Class)

而当最底层代码改动之后,整个调⽤链上的所有代码都需要修改

如果由⾃⼰创建的下级类,改为传递的⽅式 ,不在当前类中创建下级类,所以下级类即使发⽣变化(创建或减少参数),当前类本身也⽆需修改任何代码,这样就完成了程序的解耦。

在这里插入图片描述

改进之后的控制权发⽣的反转,不再是上级对象创建并控制下级对象了,⽽是将下级对象注⼊到当前对象中,下级的控制权不再由上级类控制了,这样即使下级类发⽣任何改变,当前类都是不受影响的,这就是典型的控制反转,也就是 IoC 的实现思想。

创建 spring 项目

在这里插入图片描述

  • 创建⼀个 Maven 项⽬ , 添加 Spring 框架⽀持
    在这里插入图片描述
<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.2.3.RELEASE</version>
        </dependency>
    </dependencies>
  • 添加启动类

在创建好的项⽬ java ⽂件夹下创建⼀个启动类,包含 main ⽅法
在这里插入图片描述

  • 创建 Bean

创建包 将 Bean 放入
在这里插入图片描述

  • 将 Bean 注册到容器

在创建好的项⽬中添加 Spring 配置⽂件 spring-config.xml,将此⽂件放到 resources
将 User 对象注册到 Spring 中就可以,具体操作是在 中添加如下配置:

在这里插入图片描述

  • 获取并使⽤ Bean 对象
  1. 得到 Spring 上下⽂对象,因为对象都交给 Spring 管理了,所以获取对象要从 Spring 中获取,那
    么就得先得到 Spring 的上下⽂。

  2. 通过 Spring 上下⽂,获取某⼀个指定的 Bean 对象。
    在这里插入图片描述

  3. 使⽤ Bean 对象。
    在这里插入图片描述

更加简单的读取和存储对象

存储 Bean 对象

  • 配置扫描路径: (在 spring-config.xml )
<?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:content="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">
    <content:component-scan base-package="包名"></content:component-scan>
</beans>
  • 五大类注解

让程序员看到类注解之后,就能直接了解当前类的⽤途

在这里插入图片描述

  • Bean 命名规则

首字母和第二个字母大写 :使用原类名
否则 : 就使用首字母小写类名

在这里插入图片描述

  • ⽅法注解 @ Bean
    在这里插入图片描述
  • 重命名 Bean

@ Bean 获取时注意 : @ Bean 的默认命名 = 方法名

可以通过设置 name 属性给 Bean 对象进⾏重命名操作

在这里插入图片描述

获取 Bean 对象(对象装配)

把对象取出来放到某个类中,有时候也叫 对象注⼊ 。

  • 注⼊的关键字有:
    a. @Autowired
    b. @Resource

对象装配(对象注⼊)的实现⽅法以下 3 种:

  • 属性注⼊ (依赖注入)
    属性注⼊是使⽤ @Autowired 实现的,将 Service 类注⼊到 Controller 类中。
    在这里插入图片描述
    优点 : 使用简单
    缺点 :
  1. 无法注入 final 修饰的变量
  2. 只适用于 ioc 容器
  3. 容易违背单一设计原则
  • 构造⽅法注⼊

在这里插入图片描述

优点:

  1. 可注入不可变对象;
  2. 注入对象不会被修改;
  3. 注入对象会被完全初始化;
  4. 通用性更好。
    1. Setter 注⼊

在这里插入图片描述

优点 : 完全符合单一职责的设计原则

缺点 :

  1. 不能注入不可变对象(final 修饰的对象);
  2. 注入的对象可被修改。
  • @ Resource:另⼀种注⼊关键字
@Controller
public class UserController {
    // 注⼊
    @Resource
    private UserService userService;
    public User getUser(Integer id) {
        return userService.getUser(id);
    }
}
  • @Autowired 和 @Resource 的区别
  1. 出身不同:@Autowired 来⾃于 Spring,⽽ @Resource 来⾃于 JDK 的注解;
  2. 使⽤时设置的参数不同:相⽐于 @Autowired 来说,@Resource ⽀持更多的参数设置,例如
    name 设置,根据名称获取 Bean。
  3. @Autowired 可⽤于 Setter 注⼊、构造函数注⼊和属性注⼊ ; ⽽ @Resource 不能⽤于构造函数注⼊。
  4. idea 兼容性支持不同 : 使用 @Autwired 在 idea 专业版下可能会存在误报 ; @ Resource 不会 .
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值