spring ioc

控制反转:
   把对象的创建交给spring容器来做

      spring容器创建对象的方式

         1、默认是调用默认的构造函数
         2、利用静态工厂方法创建
             spring调用工厂方法产生对象,但是真正创建对象还是由程序员来完成的
         3、实例工厂方法
        说明:
           spring配置文件中,只要是一个bean就会为该bean创建对象

      spring容器创建对象的时机

        在单例的情况下
         1、在默认的情况下,启动spring容器创建对象
         2、在spring的配置文件bean中有一个属性lazy-init="default/true/false"
               1、如果lazy-init为"default/false"在启动spring容器时创建对象
               2、如果lazy-init为"true",在context.getBean时才要创建对象
           意义:
                在第一种情况下可以在启动spring容器的时候,检查spring容器配置文件的正确性,如果再结合tomcat,
                如果spring容器不能正常启动,整个tomcat就不能正常启动。但是这样的缺点是把一些bean过早的放在了
                内存中,如果有数据,则对内存来是一个消耗
                在第二种情况下,可以减少内存的消耗,但是不容易发现错误
        在多例的情况下
            就是一种情况:在context.getBean时才创建对象

      spring的bean中的scope

        1、由spring产生的bean默认是单例的
        2、可以在spring的配置文件中,scope的值进行修改="singleton/prototype/request/session/global session"
        3、如果spring的配置文件的scope为"prototype",则在得到该bean时才创建对象

      spring容器对象的生命周期:

        1、spring容器创建对象
        2、执行init方法
        3、调用自己的方法
        4、当spring容器关闭的时候执行destroy方法
### Spring IOC(控制反转)概念 Spring IOC(Inversion of Control,控制反转)是一种设计原则/思想,其核心在于将程序中的对象创建、依赖管理和流程控制从应用程序中剥离出来,交由外部容器(如 Spring 框架的 IoC 容器)管理[^4]。这种做法减少了代码耦合度,提高了代码的可重用性、可测试性和灵活性。 具体来说,在传统的编程模型中,开发者需要手动编写大量代码来实例化类并建立这些类之间的关系;而在采用IOC的设计模式下,开发人员只需定义好组件间的接口和协作方式,具体的对象创建与依赖注入则完全由IoC容器负责完成[^2]。 ### 使用教程 为了更好地理解和应用Spring IOC的功能特性,可以按照如下指南操作: #### 配置Bean 在基于XML配置文件的方式中,可以通过`<bean>`标签声明各个业务逻辑单元,并指定它们之间可能存在的关联关系。例如: ```xml <!-- applicationContext.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" xsi:schemaLocation=" http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- Bean definitions go here --> </beans> ``` 对于更现代化的应用场景,则推荐使用Java Config或者注解驱动的方式来简化配置过程。比如利用`@Configuration`, `@ComponentScan`, 和各种作用域相关的注解(`@Scope`)等工具来自动生成所需的Beans及其属性设置。 #### 实现依赖注入(Dependency Injection) 依赖注入是实现控制反转的主要手段之一,主要分为三种形式:构造方法注入、设值方法注入以及字段级注入。其中最常用的是前两种方式因为它们能够提供更好的封装性和面向接口编程的支持[^3]。 ##### 构造方法注入示例 ```java public class MyService { private final Repository repository; @Autowired // 或者省略此标注如果只有一个匹配项的话 public MyService(Repository repo){ this.repository = repo; } } ``` ##### 设值方法注入示例 ```java @Component public class AnotherService { private Helper helper; @Autowired public void setHelper(Helper hlp) { this.helper = hlp; } } ``` 以上例子展示了如何借助@Autowired标记让Spring自动识别并装配相应的依赖资源给目标组件。 ### 示例案例分析 假设有一个简单的图书管理系统项目,其中包括Book实体类和服务层BooksManager用于处理书籍数据的操作。此时就可以考虑把两者的关系交给Spring来进行管理而不是硬编码在一起。当客户端请求到来时,只需要向容器索要已经准备好的BooksManager实例即可执行相应功能而无需关心内部细节是如何构建起来的。 通过这种方式不仅使得整个系统的结构更加清晰明了易于维护更新同时也便于后期开展单元测试等工作由于各部分职责分明互不干扰所以很容易模拟出特定环境下的行为表现以便验证预期效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值