Springboot初识--Bean的理解

注解下的Spring Ioc.

Spring所提供的两个核心理念,一个是控制反转(Inversion of Control,IoC),另一个是面向切面编程(Aspect Oriented Progarmming,AOP),IoC容器是spring的核心,可以说是Spring是一种基于IoC容器编程的框架(我更喜欢称之为CRUD框架),因为Spring Boot是基于注解的开发Spring IoC,,所以我们使用全注解的方式来理解Spring IoC技术。
在初学java的时候,我们更喜欢用new来创建对象,而在Spring中却不是,它是通过描述来创建对象的。Spring Boot中并不建议你用xml,而是通过注解的描述来生成对象。
一个系统可以生成多个对象,并且对这些对象进行管理,对象之间不是独立,相互之间还存在依赖关系。例如一个班级是由多个学生和老师组成的,那么一个班级就是依赖于学生和老师,老师和学生之间又是相互有关联的。为此Spring还提供了依赖注入的功能,是我们能够通过描述来管理各个对象的关系。
为了描述上述的班级,同学,老师这三个对象的关系,我们需要一个容器。在Spring中把每一个需要管理的对象称之为Spring Bean,而Spring管理这Bean的容器,被我们称之为Spring IoC容器。IoC容器需要具备两个基本功能:

  • 通过管理描述Bean,包括发布和获取Bean;
  • 通过描述完成Bean之间依赖的关系;

IoC容器简介

Spring IoC容器是一个管理Bean的容器,在Spring的定义中,他需要所有的接口都实现接口BeanFactory,他是一个顶级容器。

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//

package org.springframework.beans.factory;

import org.springframework.beans.BeansException;
import org.springframework.core.ResolvableType;
import org.springframework.lang.Nullable;

public interface BeanFactory {
    String FACTORY_BEAN_PREFIX = "&";
	//多个获取bean的方法
    Object getBean(String var1) throws BeansException;
	
    <T> T getBean(String var1, Class<T> var2) throws BeansException;

    Object getBean(String var1, Object... var2) throws BeansException;

    <T> T getBean(Class<T> var1) throws BeansException;

    <T> T getBean(Class<T> var1, Object... var2) throws BeansException;
	//注入方法(具体功能还没深入理解)
    <T> ObjectProvider<T> getBeanProvider(Class<T> var1);

    <T> ObjectProvider<T> getBeanProvider(ResolvableType var1);
	//是否包含bean
    boolean containsBean(String var1);
	//bean是否单例
    boolean isSingleton(String var1) throws NoSuchBeanDefinitionException;
	//bean是否原型
    boolean isPrototype(String var1) throws NoSuchBeanDefinitionException;
	//bean类型匹配
    boolean isTypeMatch(String var1, ResolvableType var2) throws NoSuchBeanDefinitionException;

    boolean isTypeMatch(String var1, Class<?> var2) throws NoSuchBeanDefinitionException;
	//获取类型
    @Nullable
    Class<?> getType(String var1) throws NoSuchBeanDefinitionException;

    @Nullable
    Class<?> getType(String var1, boolean var2) throws NoSuchBeanDefinitionException;
	//获取别名
    String[] getAliases(String var1);
}

在源码中可以看到多个getBean的方法,这些是从IoC容器中获取Bean的重要方法,isSingleton方法判断Bean是否在SpringIoC中为单例,,在默认请看下,Bean都是以单例为存在的,也就是使用getBean返回的对象都是同一个,如果isPrototype返回为true,那么我们使用getBean方法获取Bean的时候,SpringIoC容器就会创建一个新的Bean给调用者。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值