【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】

这篇具有很好参考价值的文章主要介绍了【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、Spring 简介

  • Spring 框架可以说是 Java 开发中最重要的框架,功能非常强大
  • 中文文档:https://springdoc.cn/spring/
  • 官网:https://spring.io/

【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】

  • Spring makes Java Simple、modern、productive …

Spring 框架的几个核心概念:

IoC: Inversion of Control:控制反转

DI: Dependency Injection:依赖注入

AOP: Aspect Oriented Programming:面向切面编程

Object Oriented Programming: 面向对象编程

这里使用的 Spring 的版本是:5.2.8.release

🚀耦合:我依赖你,你不见了(不要你了),对我影响很大,我就得改代码

🚀写代码的方向:解耦,降低耦合性

二、读取配置文件、创建对象

①🎄 通过类加载器读取配置文件的输入流
②🎄 通过 Properties 对象的 load() 方法,传入输入流【加载配置文件】
③🎄 通过 Properties 对象的 getProperty(String key) 方法获取到 key 对应的 value
④🎄 使用反射 API,通过全类名创建类的实例

【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】

/**
 * 创建对象实例的工厂
 */
public class InstanceFactory {
    // Properties 对象表示【.properties】配置文件
    private static Properties properties;

    static {
        // 获取配置文件的输入流
        try (InputStream is = InstanceFactory.class.getClassLoader().getResourceAsStream("properties.properties")) {
            properties = new Properties();
            // 加载配置文件输入流
            properties.load(is);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static ObjectAble getObjectByName(String key) {
        // 获取配置文件内容
        String fullPath = properties.getProperty(key);

        try {
            Class<?> cls = Class.forName(fullPath);
            return (ObjectAble) cls.newInstance();
        } catch (Exception e) {
            e.printStackTrace();
        }

        return null;
    }


    public static ObjectAble create(String key) {
        return getObjectByName(key);
    }
}

properties.properties 配置文件

personFullPath=com.guoqing.po.PersonV2
dogFullPath=com.guoqing.po.DogV2
boyFullPath=com.guoqing.po.Boy

🎄工厂模式结合配置文件降低类之间的耦合
🎄Spring 的 IoC 就是一个大工厂

三、使用 Spring

(1) 依赖

 <dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-context</artifactId>
     <version>5.2.8.RELEASE</version>
 </dependency>

(2) Spring 的核心配置文件

  • 按照下图所示创建 applicationContext.xml 文件(Spring 的核心配置文件)
    【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】
    【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】
<?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">

    <!-- 【bean】所有被 Spring 管理的对象都是 bean -->
    <!-- 配置需要被 Spring 管理的类 -->
    <!-- id: 可通过 id 的值获取到该类的实例 -->
    <!-- class: 该类的全类名 -->
    <bean id="boy" class="com.guoqing.po.Boy" />
    <bean id="personV1" class="com.guoqing.po.PersonV1" />
    <bean id="personV2" class="com.guoqing.po.PersonV2" />

</beans>

(3) 获取 Spring IoC 工厂中的对象实例

类路径的东西:
① java 文件夹中的东西(打包后 classes 中的内容)
② resources 文件夹中的东西
【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】

public class QQMain {

    public static void main(String[] args) {
         // 读取 Spring 的核心配置文件, 并得到 Spring 的 IoC 工厂
        ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");

        // 通过 IoC 工厂获取实例(boy 是 Spring 的核心配置文件中的 bean 标签的 id 属性配置的内容)
        Boy boy = ctx.getBean("boy", Boy.class);
        System.out.println("boy = " + boy);
    }

}

🍃 读取配置文件,并返回 IoC 容器的类是:ClassPathXmlApplicationContext
🍃 调用 ClassPathXmlApplicationContext 对象的 getBean() 方法,传入 bean 标签的 id 值 获取对象实例

属性的本质含义是:set 方法 后面的值改为小写
setName()name 就是属性】
setBoySchool()boySchool 就是属性】

  • IoC 最重要的作用:解耦合
  • Spring 可以轻松整合日志框架
  <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <version>1.2.3</version>
  </dependency>

通过 logback-classic 框架可以看到 Spring 相关的日志信息

【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】

四、IoC 容器

  • IoC:Inversion of Control【控制反转】
  • 对象创建的控制权转交给了 Spring
  • IoC 容器创建了一系列的 bean
<?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">

    <bean id="bookDaoImpl" class="com.guoqing.dao.impl.BookDaoImpl"/>

    <bean id="bookServiceImpl" class="com.guoqing.service.impl.BookServiceImpl">
        <property name="bookDao" ref="bookDaoImpl"/>
    </bean>

    <bean id="bookController" class="com.guoqing.controller.BookController">
        <property name="bookService" ref="bookServiceImpl"/>
    </bean>

</beans>

五、依赖注入(DI)

  • 依赖注入:Dependency Injection

常见的注入类型有3大类:
① bean(自定义类型)【ref 属性
② 基本类型、String、BigDecimal、包装类型【value 属性】
③ 集合类型(数组、Map、List、Set、Properties)☆


常见的注入方式有 2 种:
① 基于 setter(属性)
② 基于 constructor (构造方法)

(1) 基于 setter 注入【bean】

【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】

  <bean id="cat" class="com.guoqing.domain.Cat">
      <property name="catName" value="哆啦A梦"/>
      <property name="color" value="BLUE"/>
  </bean>

  <bean id="person" class="com.guoqing.domain.Person">
      <property name="cat" ref="cat"/>
  </bean>
 <bean id="cat" class="com.guoqing.domain.Cat">
     <property name="catName" value="哆啦A梦"/>
     <property name="color" value="BLUE"/>
 </bean>

 <bean id="person" class="com.guoqing.domain.Person">
     <property name="cat">
         <ref bean="cat"/>
     </property>
 </bean>
 <bean id="girl" class="com.guoqing.domain.Girl">
     <property name="cat">
         <bean class="com.guoqing.domain.Cat">
             <property name="catName" value="卡菲"/>
             <property name="color" value="PINK"/>
         </bean>
     </property>
 </bean>

(2) 基于 setter 注入【基本类型、包装类型、String、BigDecimal】

 <bean id="person" class="com.guoqing.domain.Person">
     <property name="id" value="666"/>
     <property name="name">
         <value>张国庆</value>
     </property>
     <property name="age" value="8"/>
     <property name="money">
         <value>88888.666</value>
     </property>
 </bean>

(3) 基于 setter 注入【集合类型】

  • 🍃 注入数组
    【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】
 <bean id="whatever" class="com.guoqing.domain.Whatever">
     <property name="books">
         <array>
             <value>Java 编程思想</value>
             <value>红楼梦</value>
             <value>水浒传</value>
             <value>三国演义</value>
             <value>三体</value>
         </array>
     </property>

     <property name="cats">
         <array>
             <bean class="com.guoqing.domain.Cat">
                 <property name="color" value="RED"/>
                 <property name="catName" value="小红"/>
             </bean>
             <bean class="com.guoqing.domain.Cat">
                 <property name="color" value="BLACK"/>
                 <property name="catName" value="小黑"/>
             </bean>
         </array>
     </property>
 </bean>
  • 🍃 注入 List
    【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】
 <bean id="whatever" class="com.guoqing.domain.Whatever">
     <property name="books">
         <!-- ArrayList -->
         <list>
             <value>Thinking In Java</value>
             <value>红楼梦</value>
             <value>水浒传</value>
             <value>三国演义</value>
             <value>三体</value>
         </list>
     </property>

     <property name="cats">
         <list>
             <bean class="com.guoqing.domain.Cat">
                 <property name="color" value="RED"/>
                 <property name="catName" value="小红"/>
             </bean>
             <bean class="com.guoqing.domain.Cat">
                 <property name="color" value="BLACK"/>
                 <property name="catName" value="小黑黑"/>
             </bean>
         </list>
     </property>
 </bean>
  • 🍃 注入 Set

【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】

 <bean id="whatever" class="com.guoqing.domain.Whatever">
     <property name="goods">
         <!--LinkedHashSet-->
         <set>
             <value>苹果1</value>
             <value>土豆2</value>
             <value>西瓜3</value>
             <value>电脑4</value>
             <value>窗户5</value>
             <value>窗户5</value>
             <value>窗户5</value>
             <value>鼠标6</value>
         </set>
     </property>
 </bean>

【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】

HashSet 是无顺序的【可去重】
LinkedHashSet 是有顺序的【可去重】

  • 🍃 注入 Map

【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】

 <bean id="whatever" class="com.guoqing.domain.Whatever">
     <property name="peoSal">
         <map>
             <entry key="张国庆" value="88888"/>
             <entry key="周杰伦" value="155555"/>
             <entry key="王凡" value="266666"/>
             <entry key="陈铭酒" value="12121"/>
             <entry key="刘德华" value="888888"/>
         </map>
     </property>

     <property name="peoCatMap">
         <map>
             <entry key="ZGQ">
                 <bean class="com.guoqing.domain.Cat">
                     <property name="catName" value="猫猫1"/>
                     <property name="color" value="RED"/>
                 </bean>
             </entry>
             <entry key="CMJ">
                 <bean class="com.guoqing.domain.Cat">
                     <property name="catName" value="猫猫2"/>
                     <property name="color" value="PINK"/>
                 </bean>
             </entry>
         </map>
     </property>
 </bean>
  • 🍃 注入 Properties
 <bean id="whatever" class="com.guoqing.domain.Whatever">
     <property name="properties">
         <props>
             <prop key="dao">com.guoqing.dao.impl.BookDaoImpl</prop>
             <prop key="service">com.guoqing.service.impl.BookServiceImpl</prop>
         </props>
     </property>
 </bean>

基于 setter 注入调用的是无参的构造方法

(4) 基于 setter 注入(命名空间)

【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】

没有命名空间的写法:

 <bean id="cat" class="com.guoqing.domain.Cat">
     <property name="color" value="skyblue"/>
     <property name="catName" value="阿辉"/>
 </bean>
 <bean id="teacher" class="com.guoqing.domain.Teacher">
     <property name="id" value="2"/>
     <property name="name" value="李老师"/>
     <property name="salary" value="12121.666"/>
     <property name="gender" value=""/>
     <property name="cat" ref="cat"/>
 </bean>

命名空间写法:

增加命名空间:xmlns:p="http://www.springframework.org/schema/p"

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       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">
       
    <bean id="cat" class="com.guoqing.domain.Cat" p:catName="阿辉辉" p:color="SKYBLUE"/>

    <bean id="teacher"
          p:name="张国庆老师"
          p:id="22"
          p:salary="6666.666"
          p:gender=""
          p:cat-ref="cat"
          class="com.guoqing.domain.Teacher"/>

</beans>

(5) 基于构造方法注入

  • 基本类型
    【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】
<!--调用没有参数的构造方法-->
<bean id="student" class="com.guoqing.domain.Student"/>
 <bean id="student" class="com.guoqing.domain.Student">
     <!--调用有一个参数的构造方法-->
     <constructor-arg value="张国庆"/>
 </bean>
 <bean id="student" class="com.guoqing.domain.Student">
     <!--调用有2个参数的构造方法-->
     <constructor-arg value="张国庆"/>
     <constructor-arg value="99.5"/>
 </bean>
 <bean id="student" class="com.guoqing.domain.Student">
     <!--假如顺序和构造方法参数的顺序不一样的话, 可以指定 type-->
     <!--若不顺序不一样, 且不做任何处理, 必定报错-->
     <constructor-arg value="99.5" type="double"/>
     <constructor-arg value="张国庆" type="java.lang.String"/>
 </bean>
 <bean id="student" class="com.guoqing.domain.Student">
     <!--假如顺序和构造方法参数的顺序不一样的话, 可以指定 index-->
     <!--若不顺序不一样, 且不做任何处理, 必定报错-->
     <constructor-arg value="99.5" index="1"/>
     <constructor-arg value="张国庆" index="0"/>
 </bean>

  • bean 注入

【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】

 <bean id="student" class="com.guoqing.domain.Student">
     <constructor-arg value="张国庆" index="0"/>
     <constructor-arg>
         <bean class="com.guoqing.domain.Cat">
             <property name="catName" value="花儿"/>
             <property name="color" value="ORANGE"/>
         </bean>
     </constructor-arg>
 </bean>
 <bean id="cat" class="com.guoqing.domain.Cat">
     <property name="catName" value="流浪猫"/>
     <property name="color" value="GRAY"/>
 </bean>

 <bean id="student" class="com.guoqing.domain.Student">
     <constructor-arg value="张国庆" index="0"/>
     <constructor-arg ref="cat"/>
 </bean>
 <bean id="cat" class="com.guoqing.domain.Cat">
     <property name="catName" value="流浪猫"/>
     <property name="color" value="GRAY"/>
 </bean>

 <bean id="student" class="com.guoqing.domain.Student">
     <constructor-arg value="张国庆" index="0"/>
     <constructor-arg>
         <ref bean="cat"/>
     </constructor-arg>
 </bean>

  • 注入集合
 <bean id="student" class="com.guoqing.domain.Student">
     <constructor-arg type="java.util.List">
         <list>
             <value>语文</value>
             <value>数学</value>
             <value>英语</value>
             <value>物理</value>
             <value>化学</value>
         </list>
     </constructor-arg>
 </bean>

六、创建过程比较复杂的对象

🥄 Spring 的配置文件中配置的对象只需要执行某些构造方法即可创建
🥄 当遇到创建过程极其复杂的对象(无法通过调用构造方法创建的对象)时就需要下面的方式了
🥄 如:JDBC 的 Connection 对象的创建

  <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>8.0.19</version>
  </dependency>

(1) 静态工厂(调用静态方法)

public class JdbcConnectionFactory {

    /**
     * 静态工厂
     */
    public static Connection getConnection() throws Exception {
        Class.forName("com.mysql.cj.jdbc.Driver");
        return DriverManager.getConnection("jdbc:mysql://localhost:3306/jump_zgq?serverTimezone=UTC", "root", "root");
    }

}
 <bean id="jdbcConnection"
       class="com.guoqing.factory.JdbcConnectionFactory"
       factory-method="getConnection"/>

🎀把创建复杂对象代码写在工厂中
🎀通过该工厂中的 static 方法返回对象的实例
🎀在 Spring 的核心配置文件中,通过 factory-method 属性指定需要调用该工厂类的哪个方法返回对象实例
🎀【缺点】无法传参

(2) 实例工厂

public class JdbcConnectionFactory {
    private String driverClass;
    private String url;
    private String user;
    private String pwd;

    public JdbcConnectionFactory(String driverClass, String url, String user, String pwd) {
        this.driverClass = driverClass;
        this.url = url;
        this.user = user;
        this.pwd = pwd;
    }

    /**
     * 实例工厂
     */
    public Connection getConnection() throws Exception {
        System.out.println("调用了 getConnection() 方法");
        Class.forName(this.driverClass);
        return DriverManager.getConnection(url, user, pwd);
    }
}
  <!--创建工厂实例-->
  <bean id="jdbcConnectionFactory" class="com.guoqing.factory.JdbcConnectionFactory">
      <constructor-arg name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
      <constructor-arg name="url" value="jdbc:mysql://localhost:3306/jump_zgq?serverTimezone=UTC"/>
      <constructor-arg name="user" value="root"/>
      <constructor-arg name="pwd" value="root"/>
  </bean>

  <!--通过工厂实例创建 Connection 对象-->
  <bean id="jdbcConnection" factory-bean="jdbcConnectionFactory" factory-method="getConnection"/>

🎉 factory-bean 属性指代工厂类的实例
🎉 factory-method 属性指代要调用工厂对象的哪个实例方法来返回该复杂对象

(3) FactoryBean

🎁 Spring 提供的、用于方便地创建复杂对象的接口
🎁 本质和【实例工厂】类似

public class JdbcConnectionFactoryBean implements FactoryBean<Connection> {
    private String driverClass;
    private String url;
    private String user;
    private String pwd;

    public JdbcConnectionFactoryBean(String driverClass, String url, String user, String pwd) {
        this.driverClass = driverClass;
        this.url = url;
        this.user = user;
        this.pwd = pwd;
    }

    /**
     * 写创建该复杂对象的一系列代码
     */
    @Override
    public Connection getObject() throws Exception {
        System.out.println("调用了 getObject() 方法");
        Class.forName(this.driverClass);
        return DriverManager.getConnection(url, user, pwd);
    }

    @Override
    public Class<?> getObjectType() {
        return Connection.class;
    }
}
 <bean id="jdbcConnection" class="com.guoqing.factoryBean.JdbcConnectionFactoryBean">
     <constructor-arg name="driverClass" value="com.mysql.cj.jdbc.Driver"/>
     <constructor-arg name="url" value="jdbc:mysql://localhost:3306/jump_zgq?serverTimezone=UTC"/>
     <constructor-arg name="user" value="root"/>
     <constructor-arg name="pwd" value="root"/>
 </bean>

🍃 监听 class 属性后的是否实现(implements)了FactoryBean 接口
🍃 若实现了 FactoryBean 接口,则调用该getObject() 方法,然后将该方法返回的实例放入 IoC 容器中

若就是想拿到该类的实例,可通过 & 符号拼接上 id 属性的值,然后通过 getBean() 方法获取

public class QQMain {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        
        Object bean = ctx.getBean("&jdbcConnection");

        // bean = com.guoqing.factoryBean.JdbcConnectionFactoryBean@436e852b
        System.out.println("bean = " + bean);
    }
}

若文章有错误请不吝赐教文章来源地址https://www.toymoban.com/news/detail-487824.html

到了这里,关于【Spring】1、Spring 框架的基本使用【读取配置文件、IoC、依赖注入的几种方式、FactoryBean】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【.NET6+WPF】WPF使用prism框架+Unity IOC容器实现MVVM双向绑定和依赖注入

    前言:在C/S架构上,WPF无疑已经是“桌面一霸”了。在.NET生态环境中,很多小伙伴还在使用Winform开发C/S架构的桌面应用。但是WPF也有很多年的历史了,并且基于MVVM的开发模式,受到了很多开发者的喜爱。 并且随着工业化的进展,以及几年前微软对.NET平台的开源,国内大多

    2024年02月06日
    浏览(45)
  • Spring IOC:详解【依赖注入数值问题 & 依赖注入方式】

    编译软件:IntelliJ IDEA 2019.2.4 x64 操作系统:win10 x64 位 家庭版 Maven版本:apache-maven-3.6.3 Mybatis版本:3.5.6 spring版本:5.3.1 第一章:初识Spring:如何在Maven工程上搭建Spring框架? 第二章:Spring IOC:IOC在Spring底层中如何实现? 第三章:Spring IOC:详解【依赖注入数值问题 依赖注入

    2024年02月04日
    浏览(35)
  • 全面掌握Spring框架:深入解析IOC、AOP、事务管理与注解使用

    探索Spring框架的深层次知识,包括Spring IOC容器的初始化流程、AOP的实现机制、事务管理的细节、循环依赖问题的处理、条件注解的应用、JavaConfig的使用方法、PostProcessor的角色、@Autowired和@Value注解的高级应用,以及${}与#{}的区别。

    2024年03月13日
    浏览(181)
  • Spring高手之路——深入理解与实现IOC依赖查找与依赖注入

    本文从 xml 开始讲解,注解后面给出   首先,我们需要明白什么是 IOC (控制反转)和依赖查找。在 Spring Framework 中,控制反转是一种设计模式,可以帮助我们解耦模块间的关系,这样我们就可以把注意力更多地集中在核心的业务逻辑上,而不是在对象的创建和管理上。  

    2024年02月06日
    浏览(43)
  • spring--Ioc控制反转/DI依赖注入

    1.概念:在使用对象的时候,由主动的new转换为外部提供对象,将对象创建的控制权交给外部,即控制反转 2.spring提供了一个容器,称为IOC容器,用来从当ioc中的外部 3.被管理或者被创建的对象在ioc中被叫做bean 使用步骤 1.导入依赖 spring-context 依赖,用到xml文件就需导入 2.创建

    2024年02月12日
    浏览(33)
  • Spring源码解析——IOC之循环依赖处理

    循环依赖其实就是循环引用,也就是两个或则两个以上的bean互相持有对方,最终形成闭环。比如A依赖于B,B依赖于C,C又依赖于A。如下图所示: 注意,这里不是函数的循环调用,是对象的相互依赖关系。循环调用其实就是一个死循环,除非有终结条件。 最全面的Java面试网站

    2024年02月08日
    浏览(34)
  • Spring高手之路1——深入理解与实现IOC依赖查找与依赖注入

    本文从 xml 开始讲解,注解后面给出   首先,我们需要明白什么是 IOC (控制反转)和依赖查找。在 Spring Framework 中,控制反转是一种设计模式,可以帮助我们解耦模块间的关系,这样我们就可以把注意力更多地集中在核心的业务逻辑上,而不是在对象的创建和管理上。  

    2024年02月09日
    浏览(47)
  • spring项目本地配置及nacos远端配置的解密(不依赖jasypt框架)

    locator:NacosDecryptPropertySourceLocator.java 继承NacosPropertySourceLocator并重写locate方法,在nacos自身的热更新配置置入propertySources前将解密后的propertySource放入spring更新environment的队列(spring在更新environment时遇到同名的propertySource会优先选择更早放入的,所以本功能为@Order(-1),在正常的

    2024年02月14日
    浏览(23)
  • 什么是Spring的IoC,依赖注入又该怎么实现?

    什么是IoC 所谓的控制反转(Inversion of Control),缩写为IoC,其实就是把对象的创建和对象之间的依赖关系处理,交给 Spring容器来管理,不用程序员自己创建和维护的一种技术。我们使用IoC的目的,主要是为了降低类之间的耦合。 IoC的底层原理 IoC的底层原理主要是基于xml解析+工

    2024年02月12日
    浏览(33)
  • 深入理解 Spring IoC 和 DI:掌握控制反转和依赖注入的精髓

    在本文中,我们将介绍 IoC (控制反转)和 DI (依赖注入)的概念,以及如何在 Spring 框架中实现它们。 控制反转是软件工程中的一个原则,它将对象或程序的某些部分的控制权转移给容器或框架。我们最常在面向对象编程的上下文中使用它。 与传统编程相比,传统编程中我

    2024年02月04日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包