一.spring-core IoC container(1) container概述和Bean基础

SRPG游戏开发(三十七)第八章 游戏中的数据 - 七 数据的容器(Data Container) 1 模型接口, 2 管理器, 3 物品模型, 4 角色模型 阅读详情

一:IoC 控制反转

IoC 控制反转,也叫依赖注入。主要用于解决程序中的依赖关系维护问题。理解依赖注入需要理解两方面的内容:
1.什么是依赖
所谓依赖,简单来说就是如果类A中包含有类B的对象,那么传统方式构造B对象的方法是B a = new B(),这就在A中形成了对B的依赖关系。
2.什么是注入?
所谓注入,拿上述实例来说,spring通过他的方式,也就是容器,将这些所依赖的对象统一管理起来,在程序中需要使用到的地方直接从容器中取得,这就好像是容器主动注入到程序中一样。

二:Container overview 容器概观

org.springframework.context.ApplicationContext 接口代表了IOC容器,他是初始化、配置、组装上述的Beans 而诞生的。常用的实现接口:ClassPathXmlApplicationContext 和 FileSystemXmlApplicationContext 分别是从classpath读取配置xml或者filesystem 读取 配置的xml 。 当然,现今metadata(元数据)的配置也可以通过java注解或者java代码实现。

这里写图片描述

2.1 Configuration metadata 元数据配置

传统的配置方式使用的是xml的配置,spring除了使用xml配置元数据以外,还允许使用 基于注解的配置方式 和 基于java-based的配置方式,现如今,很多开发者都是使用 java-based 的配置方式 , 本文分别对基于xml和java-based annocation 都进行了阐述

XML-based Configuration

配置格式:

<?xml version="1.0" encoding="UTF-8"?>
<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">

    <import resource="services.xml"/>
    <import resource="resources/messageSource.xml"/>
    <import resource="/resources/themeSource.xml"/>
    <bean id="..." class="...">
        <!-- collaborators and configuration for this bean go here -->
    </bean>

    <bean id="..." class="...">
        <!-- collaborators and configuration for this bean go here -->
    </bean>

    <!-- more bean definitions go here -->

</beans>

其中,每一对<bean></bean> 代表了一个被注入的bean,其中的id 是一个确定bean身份的字符串,不可重复。class 代表的是类全名 这是id 身份对应的那个类。

容器初始化:

初始化容器很简单,如果配置文件在classpath下,可以直接使用

ApplicationContext context =
    new ClassPathXmlApplicationContext(new String[] {"services.xml", "daos.xml"});

即可,关于ClassPath和FileSystem等Resource,将在第二章阐述。

配置文件导入方式:

在实际项目中,可能有很多配置文件对应不同的层级,如果需要一个统一的配置文件进行管理,这个时候就需要用到配置文件的导入,语法如下:

<beans>
    <!-- 相对路径 -->
    <import resource="services.xml"/>
    <import resource="resources/messageSource.xml"/>
    <!-- 绝对路径 -->
    <import resource="/resources/themeSource.xml"/>

    <bean id="bean1" class="..."/>
    <bean id="bean2" class="..."/>
</beans>

resource使用相对路径和绝对路径均可

容器使用:

接口ApplicationContext 相当于一个大工厂,可以用于生产和维护各种经初始化的bean对象 主要使用方法:T getBean(String name, Class<T> requiredType)

// create and configure beans
ApplicationContext context =
    new ClassPathXmlApplicationContext(new String[] {"services.xml", "daos.xml"});

// retrieve configured instance
PetStoreService service = context.getBean("petStore", PetStoreService.class);

// use configured instance
List<String> userList = service.getUsernameList();

三:Bean 概况

spring IoC 容器管理各种各样的Bean,这些bean的创建都会在容器中存在元数据配置。最直观的就是上述的xml配置。
容器内部,bean定义表示BeanDefinition 其中包含且不只有下面的信息:

  • 类全名:bean对应的类
  • bean的行为配置元素,bean在容器中的行为(包括范围、生命周期和请他等等)
  • 和其他bean的依赖关系
  • 其他配置来新创建的对象,比如连接bean的数量管理,数据库连接池池大小。

Bean 定义

属性:
  • class
  • name
  • scope
  • constructor arguments
  • properties
  • autowiring mode
  • initialization method
  • destruction method
    下面对这些属性进行说明:

class:

  • 典型的通过在容器的bean中配置class属性将对应的class交给容器管理,避免在程序中使用的时候使用new 方法
  • 静态内部类的配置:class="com.example.Foo$Bar" 其中Bar 是Foo的静态内部类

name:

一般而言,每一个bean的id是唯一的,但是name却可以有多个,他们可以通过别名进行区分:

<alias name="subsystemA-dataSource" alias="subsystemB-dataSource"/>
<alias name="subsystemA-dataSource" alias="myApp-dataSource" />

constructor arguments:

基于构造方法的注入:

如果bean的构造中包含有依赖关系,及包含其他对象。比如:

package x.y;

public class Foo {
    private int year;
    public Foo(Bar bar, Baz baz,int year) {
        // ...
    }

}

可以用过使用如下配置:

<beans>
    <bean id="foo" class="x.y.Foo">
        <constructor-arg ref="bar"/>
        <constructor-arg ref="baz"/>
        <!--构造中包含有基本类型或者String -->
        <constructor-arg type="int" value="7500000"/>
        <!--如果有多个基本类型或者String 也可以使用 “index”-->
        <!--<constructor-arg index="0" value="7500000"/>-->
        <!--还可以直接使用属性的名字-->
        <!--<constructor-arg name="year" value="7500000"/>-->
    </bean>
    <bean id="bar" class="x.y.Bar"/>
    <bean id="baz" class="x.y.Baz"/>

</beans>

基于Setter方法的注入:

如果你的bean中设置了该属性的setter方法,可以使用setter注入

public class ExampleBean {

    private AnotherBean beanOne;
    private YetAnotherBean beanTwo;
    private int i;

    public void setBeanOne(AnotherBean beanOne) {
        this.beanOne = beanOne;
    }

    public void setBeanTwo(YetAnotherBean beanTwo) {
        this.beanTwo = beanTwo;
    }

    public void setIntegerProperty(int i) {
        this.i = i;
    }

}
<bean id="exampleBean" class="examples.ExampleBean">
    <!-- setter injection using the nested ref element -->
    <property name="beanOne">
        <ref bean="anotherExampleBean"/>
    </property>

    <!-- setter injection using the neater ref attribute -->
    <property name="beanTwo" ref="yetAnotherBean"/>
    <property name="integerProperty" value="1"/>
</bean>

<bean id="anotherExampleBean" class="examples.AnotherBean"/>
<bean id="yetAnotherBean" class="examples.YetAnotherBean"/>

对于construct注入和setter注入是可以混用的,一般而言,对于一些强制的依赖优先选用construct注入 而 非强制的以来可以使用setter注入,当然,在setter方法上使用@Require注解表示该依赖需要强制注入。

properties:

在上述setter注入中已有所阐述,表示bean中的属性,通过value或者ref赋值
在使用properties时候,也有一种简化的写法,如下:

<bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <!-- results in a setDriverClassName(String) call -->
    <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
    <property name="url" value="jdbc:mysql://localhost:3306/mydb"/>
    <property name="username" value="root"/>
    <property name="password" value="masterkaoli"/>
</bean>

可以写成:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close"
        p:driverClassName="com.mysql.jdbc.Driver"
        p:url="jdbc:mysql://localhost:3306/mydb"
        p:username="root"
        p:password="masterkaoli"/>

</beans>

注意需要导入p-namespace
对于内部类中的bean的属性赋值:

<bean id="outer" class="...">
    <!-- instead of using a reference to a target bean, simply define the target bean inline -->
    <property name="target">
        <bean class="com.example.Person"> <!-- this is the inner bean -->
            <property name="name" value="Fiona Apple"/>
            <property name="age" value="25"/>
        </bean>
    </property>
</bean>

对于Collections的配置:

<bean id="moreComplexObject" class="example.ComplexObject">
    <!--配置 java.util.Properties-->
    <property name="adminEmails">
        <props>
            <prop key="administrator">administrator@example.org</prop>
            <prop key="support">support@example.org</prop>
            <prop key="development">development@example.org</prop>
        </props>
    </property>
    <!-- 配置 java.util.List  -->
    <property name="someList">
        <list>
            <value>a list element followed by a reference</value>
            <ref bean="myDataSource" />
        </list>
    </property>
    <!-- 配置 java.util.Map -->
    <property name="someMap">
        <map>
            <entry key="an entry" value="just some string"/>
            <entry key ="a ref" value-ref="myDataSource"/>
        </map>
    </property>
    <!-- 配置 java.util.Set  -->
    <property name="someSet">
        <set>
            <value>just some string</value>
            <ref bean="myDataSource" />
        </set>
    </property>
</bean>
spring默认使用 eagerly create 即 急加载的方式 初始化所有单例bean 的,这样的目的主要是在程序启动的时候就可以检测bean初始化存在的错误 可以通过 设置 lazy-init="true" 来设置为懒加载

Autowiring:

spring容器可以自动相互合作的beans,在<bean/> 的属性中加入autowire 元素,自动装配有四种模式:

  • no : (默认)不使用自动装配
  • byName: 通过name属性进行自动装配,比如:如果一个bean在定义的时候设置了byname 自动装配, 该bean包含了了一个master 属性和对应的setter方法,spring 会被命名master 的bean 将其设值到前一个bean中。
  • byType : 通过类型自动装配,要求容器中不得多余一个该类型的bean,不然会抛出异常。
  • constructor :和byType类似 但是用在构造参数中
**自动装配的优点和缺点:**
优点:
1.自动装配减少配置具体属性和构造参数的必要性
2.自动装配能根据对象的改变更新配置,如果你需要在类中增加依赖,那么并不需要改变该类对应bean的配置。
缺点和限制:
1.如果在bean中有明确的配置对应的property或者构造参数的值,那么该值会覆盖自动装配,基本类型和String不能自动装配
2.明确的配置会比自动装配更家准确
3.自动装配的对象不得出现多次,不然会报错
在<bean/>中设置autowire-candidate=false会取消自动装配,即使使用了 @Autowired注解

initialization method:

org.springframework.beans.factory.InitializingBean 接口允许bean在必要属性被设值后做一些初始化的操作,一般不推荐直接使用这个接口,而是使用@PostConstruct 具体的POJO初始化方法,xml配置中,可以使用 init-method 来配置初始化

void afterPropertiesSet() throws Exception;
<bean id="exampleInitBean" class="examples.ExampleBean" init-method="init"/>
public class ExampleBean {
    public void init() {
        // do some initialization work
    }
}

destruction method:

org.springframework.beans.factory.DisposableBean接口 允许bean在destroy的时候执行一些后续动作,推荐使用注解@PreDestroy

void destroy() throws Exception;

或者在xml中配置

<bean id="exampleInitBean" class="examples.ExampleBean" destroy-method="cleanup"/>
public class ExampleBean {
    public void cleanup() {
        // do some destruction work (like releasing pooled connections)
    }
}

Method injection 方法注入:

如果一个bean中依赖另外一个bean,但是两个bean的生命周期不一样,这时候将导致程序出现问题。
一种解决方法是放弃一些控制反转,

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
//实现该接口后,容器会将ApplicationContext 自动设值给该bean
public class CommandManager implements ApplicationContextAware {
    private ApplicationContext applicationContext;
    public Object process(Map commandState) {
        // grab a new instance of the appropriate Command
        Command command = createCommand();
        // set the state on the (hopefully brand new) Command instance
        command.setState(commandState);
        return command.execute();
    }
    protected Command createCommand() {
        // notice the Spring API dependency!
        return this.applicationContext.getBean("command", Command.class);
    }
    public void setApplicationContext(
            ApplicationContext applicationContext) throws BeansException {
        this.applicationContext = applicationContext;
    }
}

上述方法中,通过实现ApplicationContextAware 获取 applicationContext 对象 ,使得应用可以在需要的时候获取不同生命周期的bean,这样做的代价是放弃了一下ioc的特性。

Lookup method injection 使用lookup-method属性
先看一个例子:

public abstract class CommandManager {

    public Object process(Object commandState) {    
        Command command = createCommand();     
        command.setState(commandState);
        return command.execute();
    }

    protected abstract Command createCommand();
}

在上述的类中有一个抽象方法,此方法返回值是 一个对象,在spring中,可以通过在<bean/> 中加上lookup-method 自动形成这个抽象方法的实现。

<!-- a stateful bean deployed as a prototype (non-singleton) -->
<bean id="myCommand" class="fiona.apple.AsyncCommand" scope="prototype">
    <!-- inject dependencies here as required -->
</bean>
<!-- commandProcessor uses statefulCommandHelper -->
<bean id="commandManager" class="fiona.apple.CommandManager">
    <lookup-method name="createCommand" bean="myCommand"/>
</bean>

这种形式的注入有一定条件:

<public|protected> [abstract] <return-type> theMethodName(no-arguments);

也可以在bean的方法中使用@Lookup("myCommand") 注解

scope

在容器中初始化一个bean的同时,相当与创建了一个bean的“处方”,具体如何是配置,是由自己配置了。我们可以通过同一个“处方”根据需要创建出对应数量的bean,bean的scope分为7种:

  • singleton : (默认)单例bean,spring 每个IoC容器中只有一个bean
  • prototype: IoC容器中有多个bean
  • request:每一个HTTP Request请求会创建一个bean
  • session:每一个Session的生命周期中有一个bean,只在web应用中有用
  • globalSession : 每一个globalSession 的生命周期中有一个bean,只在web应用中有用
  • application:每一个application的生命周期中有一个bean,只在web应用中有用
  • websocket:每一个websocket的生命周期中有一个bean,只在web应用中有用
java框架Spring01:核心容器模块(Core Container) Spring010. Spring框架概述1. Spring IOC(Inverse Of Controll)0. Inverse Of Controll(控制反转)1. 依赖注入方式1.1. 依赖注入(DI)(个人理解)1. 什么是依赖?1.2 Spring IOC 中的依赖注入1.xml配置注入2.注解注入2. IoC 容器(对象工厂)3. 总结 0. Spring框架概述 Spring 是⼀种轻量级开发框架,旨在提⾼开发⼈员的开发效率以及系统的可维护性。 我们⼀般说 Spring 框架指的都是 Spr 阅读详情

相关推荐

几何非线性-屈曲分析

结构系统的破坏分为两种,一类是因材料软化而引起的强度破坏,另一类是几何软化使得结构的几何形状发生极大变化,从而使结构丧失承载能力。在材料力学中是这样定义压杆失稳的:中心受压直杆(理想模型)在直线状态下平衡,由稳定平衡转化为不稳定平衡时所受的轴向压力的界限值,称为临界压力。中心受压直杆在临界压力的作用下,其直线形态的平衡开始丧失稳定性,简称为失稳。显然,这个定义只使用于理想的压杆模型,那么关于失稳和屈曲是否存在一般性定义呢?

YORU_NO_KUNI的博客 1万+

单例模式

简介单例模式在是指在程序运行过程中只存在一个该类的实例,这对于复杂的项目来说减轻了项目运行时的负担。因此在许多框架中有着重要的应用,比如Spring. 对于严格限制的单例模式,单例类应该具有以下特点: 1.私有化构造器 2.在类的内部将实例创建 3.提供静态公共的获取实例的方法 单例模式分为饿汉式(一种)和懒汉式(三种),下面将依次介绍:饿汉式饿汉式,即在类加载时就将其初始化 或者置于静态

yzb_20115952的博客 247

Libero SoC v2021.1离线安装与IP核配置全攻略

本文详细介绍了Libero SoC v2021.1在离线环境下的完整安装与配置流程。核心内容包括如何选择正确的离线安装包、获取并配置许可证、安装与挂载MegaVault IP库,以及将ModelSim仿真器切换至免费SE模式的关键步骤。文章旨在帮助内网开发者避开常见陷阱,顺利完成FPGA开发环境的搭建。

weixin_29279101的博客 409

Spring理论知识(Ⅱ)——Spring核心容器模块

Spring的组成 Spring由20个核心依赖组成,这20个核心依赖可以分为6个核心模块 本篇文章着重描述Spring核心容器模块,其中包含了spring-beans,spring-core,spring-context,spring-expression-language(SpEl),spring-context-support等依赖 1. Spring核心容器 1.1 Spring核心容器的依赖简介 Spring Core Container 是 Spring 框架的核心部分,它为整个 Spr

敢问路在何方,路在脚下 1479

手把手教你用STM32H743+FreeRTOS+LWIP搭建物联网网关(附完整工程)

本文详细介绍了如何使用STM32H743微控制器结合FreeRTOS实时操作系统和LWIP协议栈构建高性能物联网网关。内容涵盖硬件配置、FreeRTOS任务设计、LWIP协议栈优化及物联网协议集成,提供完整工程示例,助力开发者快速实现稳定可靠的网络通信枢纽。

weixin_42623010的博客 503

Vector CANape的使用记录

开门见山,今天想和大家分享下CANape使用记录,分享原因是近日在分析一个客户现场软件问题时,需要用到CANape来实时的监测ECU中的变量,因为之前对CANape的认知比较浅薄,觉得标定工程师使用他就足够了,但是这次的经历让我觉得需要写点东西来记录自己学习并使用他的过程。 相信大家能够在网上找到很多关于如何使用CANape的文章,从新建Project到后面的数据的观测、保存以及回放等等。我个人也是这么学过来的,所以我不打算从那些方面着手去描述如何使用她,而是根据我的真实使用过程以及问题的抛出到如何解决来

2万+

mvc实战-仿SpringMVC 框架实现

  Spring这个自从诞生就一直很火的项目,现在依旧宝刀不老,几年前还信心满满的去读它的源码,结果是似懂非懂,云里雾里的感觉,现在注解,反射,泛型等java新特性让我们构建像spring这样的框架简单很多。这一次,我将带不在被框架引导开发,而是自己朝着架构的方向前进。讲自己的架构思维能力,达到终的效果我们不是征服框架。而是创造框架。

人形机器人骨骼材料选型实战:从铝合金到碳纤维的5种方案对比

本文深入探讨人形机器人骨骼材料的选型策略,对比铝合金、镁合金、钛合金、碳纤维复合材料及3D打印材料等5种方案的性能优劣。通过建立强度-重量比、疲劳寿命等核心评价维度,结合具体应用场景,提供科学的材料决策方法论,助力开发者优化机器人结构设计,实现性能与成本的平衡。

weixin_29199873的博客 440

Spring Core 之 The IOC Container Overview(IOC容器概述)

文章目录The IoC Container一、Overview1、Introduction to the Spring IoC2、Container Overview The IoC Container 一、Overview 1、Introduction to the Spring IoC IoC is also known as dependency injection .It is a process whereby objects define their dependencies (that is,

qq_38515961的博客 523

Hermes V0.10.0:官方UI几乎无Bug版

如果你还在观望Hermes,现在可能是最好的入局时机。 因为网页端来了,门槛降到了最低。 如果你已经是Hermes用户,升级就对了。 因为0.9.0的更新,值得一试。

weixin_66295112的博客 2046

企业AI数据资产评估的自动化工具:AI应用架构师的使用指南

在AI驱动的企业数字化转型中,数据资产是支撑模型训练、业务决策的核心燃料。然而,80%的AI项目失败源于数据问题——低质量数据导致模型偏差、未评估的风险引发合规危机、价值不明确的数据浪费资源。手动数据资产评估效率低、易出错,无法满足规模化AI应用需求。本文将以AI应用架构师的视角,拆解企业数据资产评估的核心逻辑,用"餐厅选食材"的生活化比喻解释复杂概念,结合自动化工具的技术原理与实战案例,教你如何从0到1搭建数据资产评估体系。无论是数据质量检测、价值量化还是风险防控,你都能找到可落地的工具方案与实践步骤。

2502_91592937的博客 1629

Spring Framework Core(1)-The Ioc Container(1) Spring IoC 容器和Beans简介

Ioc 容器 1.1 介绍Spring IoC 容器和Beans 本章介绍了控制反转(IoC)原理的Spring框架实现。IoC也称为依赖项注入(DI)。这是一个对象仅通过构造函数参数、工厂方法的参数或对象实例构造或从工厂方法返回后在对象实例上设置的属性来定义其依赖项(即使用的其他对象)的过程。然后容器在创建bean时注入这些依赖项。这个过程基本上是bean本身的逆过程(因此称为控制反转),通过使...

抛砖引玉 318

prplOS组件流程梳理

本文梳理了prplOS系统中设备信息管理模块(deviceinfo-manager)的工作流程。该模块启动时通过/etc/init.d/deviceinfo-manager调用核心框架amxrt执行,主要功能包括收集设备信息、管理数据模型、初始化子系统等。系统采用ODL文件定义数据模型,通过解析器将配置文件转换为内存中的对象树。流程涉及命令行参数解析、ODL文件加载、后端模块扫描等核心步骤,最终构建出完整的数据模型供上层应用访问。整个架构体现了模块化设计思想,通过动态加载插件实现功能扩展。

四儿家的小祖宗的博客 1272

spring文档阅读——Core: The IoC Container

用了这么久的spring框架却一直不知其所以然,直接在网上看别人的攻略又感觉差了点什么,因此决定系统的看一下spring官方的英文文档。本系列博客将按照每一篇文章对应官方文档中的一个小节的形式发布,文章内容分为正文和单词两部分。 笔者的英文水平一般,正文中的引用翻译也只是部分翻译,故本文只是spring文档阅读过程中的记录和分享,不可作为译文参考。 官方文档地址:https://spring.io/projects/spring-framework

ary的博客 834

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Spring Framework Documentation - core - 1. The IoC Container - 1.3Bean概述

1.3. Bean Overview A Spring IoC container manages one or more beans. These beans are created with the configuration metadata that you supply to the container (for example, in the form of XML<bean/>definitions). Within the container itself, these...

weixin_43680337的博客 1440

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Spring概述

IOC (Inverse of Control)即控制反转:正传是自己创建依赖对象;反正是有IOC工厂来创建依赖对象;原来:我们在获取对象时,都是采用new的方式。是主动的。现在:我们获取对象时,同时跟工厂要,有工厂为我们查找或者创建对象。是被动的。这种被动接收的方式获取对象的思想就是控制反转,它是spring框架的核心之一。在Spring中,bean作用域用于确定bean实例应该从哪种类型的Spring容器中返回给调用者。

2301_78090811的博客 923

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Spring Framework Documentation - core - 1. The IoC Container - 1.1对Spring IoC 和Bean的简明介绍

version 5.3.9 This part of the reference documentation covers all the technologies that are absolutely integral to the Spring Framework. Foremost amongst these is the Spring Framework’s Inversion of Control (IoC) container. A thorough treatment of the Sp

weixin_43680337的博客 313

Spring基础:架构/IoC/Bean/AOP

文章目录Spring概述Spring框架的优点Spring的体系结构Core Container核心容器Data Access/Integration 数据访问/集成Web其他模块依赖注入依赖注入的概念依赖注入的实现方式 Spring概述 Spring是Rod Johnson组织和开发的一个分层的Java SE/EE full-stack(一站式)轻量级开源框架。 以IoC(Inversion of Control 控制反转)和AOP(Aspect Oriented Programming 面向切面编程)

fhzmWJ的博客 355

Spring Framework Core(1)-The Ioc Container(4)

1 IoC 容器 1.4 依赖 1.4.6 方法注入 在大多数应用程序场景中,容器中的大多数bean都是单例的。当一个单例bean需要与另一个单例bean协作,或者一个非单例bean需要与另一个非单例bean协作时,通常通过将一个bean定义为另一个bean的属性来处理依赖性。当bean的生命周期不同时,就会出现问题。假设单例bean A需要使用非单例(原型)bean B,可能是在A的每个方法调用...

抛砖引玉 211

Spring Framework Documentation - core - 1. The IoC Container - 1.2容器总览

原文链接:https://docs.spring.io/spring-framework/docs/current/reference/html/core.html spring version 5.3.9 1.2. 容器总览 Container Overview org.springframework.context.ApplicationContext 接口代表的是Spring IoC 容器,他负责初始化,配置,装配Bean。容器从配置元数据中获取对象的初始化,配置,装配信息。配置可以..

weixin_43680337的博客 306

Spring学习总结—IOC和AOP

1. 概述 1.1 简介 Spring 是分层的 full-stack(全栈) 轻量级开源框架,以 IoC 和 AOP 为内核,提供了展现层Spring MVC和业务层事务管理等众多的企业级应⽤技术,还能整合开源世界众多著名的第三⽅框架和类库,已经成为使⽤最多的 Java EE 企业应⽤开源框架。 1.2 核心结构 Spring框架是一个轻量级的解决方案,可以一站式地构建企业级应用。Spring是模块化的,所以可以只使用其中需要的部分。主要包括几大模块:数据处理模块、Web模块、AOP/Aspect

dukay2021的博客 469

Spring 基础

我们一般说 Spring 框架指的都是 Spring Framework,它是很多模块的集合,使用这些模块可以很方便地协助我们进行开发,比如说 Spring 支持 IoC(Inversion of Control:控制反转) 和 AOP(Aspect-Oriented Programming:面向切面编程)、可以很方便地对数据库进行访问、可以很方便地集成第三方组件(电子邮件,任务,调度,缓存等等)、对单元测试支持比较好、支持 RESTful Java 应用程序的开发。显而易见,这种模式存在很多问题。

2403_87122707的博客 1874

Spring Framework Core(1)-The Ioc Container(2) 依赖

1 IoC 容器 1.4 依赖 典型的企业应用程序不包含单个对象(或Spring中的bean)。即使是最简单的应用程序也有几个对象一起工作,以呈现最终用户所看到的一致的应用程序。下一节将解释如何从定义许多独立的bean定义过渡到一个完全实现的应用程序,其中对象通过协作实现目标。 1.4.1 依赖注入 依赖项注入(DI)是一个过程,在这个过程中,对象仅通过构造函数参数、工厂方法的参数或从工厂方法构造...

抛砖引玉 248

Spring Framework Core(1)-The Ioc Container(5) Bean 作用域

1 IoC 容器 1.5 Bean 作用域 当您创建一个bean定义时,您将创建一个用于创建由该bean定义定义的类的实际实例的方法。bean定义是模板的想法很重要,因为它意味着,与类一样,您可以从一个模板创建多个对象实例。 您不仅可以控制要插入到由特定bean定义创建的对象中的各种依赖项和配置值,还可以控制由特定bean定义创建的对象的范围。这种方法强大而灵活,因为您可以选择通过配置创建的对象的...

抛砖引玉 210

spring文档Core-The IoC container(1.1-1.2)

目录 1.1. Introduction to the Spring IoC Container and Beans 1.2. Container Overview 1.2.1. Configuration Metadata 1.2.2. Instantiating a Container 1.2.3. Using the Container 1.1. Introductio...

菜鸟不想菜的博客 344

Spring Framework Core(1)-The Ioc Container(3)

1 IoC 容器 1.4.3 使用depends-on 如果一个bean是另一个bean的依赖项,这通常意味着将一个bean设置为另一个bean的属性。通常使用基于xml的配置元数据中的<ref/>元素来完成此任务。然而,有时候bean之间的依赖关系不那么直接。例如,当需要触发类中的静态初始化器时,例如注册数据库驱动程序时。依赖属性可以显式地强制在使用此元素的bean初始化之前对一个或...

抛砖引玉 263
上一篇: spring-core(一):前章-目录和环境构建
下一篇: 一.spring-core IoC container(2) 基于annotation的配置方式
最伤离别
博客等级 码龄15年 15粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值