Spring的三大核心思想

本文详细介绍了Spring框架的三大核心思想:控制反转(IOC)、依赖注入(DI)和面向切面编程(AOP)。IOC通过将组件关系移到外部容器管理,实现了对象的动态注册。DI则由容器在运行时决定组件间的依赖关系并注入。AOP则是为了分离系统中的关注点,通过‘横切’技术,实现公共逻辑的模块化,降低耦合度并提高可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Spring的三大核心思想:IOC(控制反转),DI(依赖注入),AOP(面向切面编程)。

(1)IOC(控制反转)

实现将组件间的关系从程序内部提到外部容器(spring的xml)来管理。

首先外部容器(spring.xml)中会动态的注册业务所需的对象(接口/类)

(2)DI(依赖注入)

组件之间的依赖关系由容器在应用系统运行期来决定, 也就是由容器动态地将某种依赖关系的目标对象实例注入到应用系统中的各个关联的组件之中
导入架包:

org.springframework
spring-beans
5.1.5.RELEASE

org.springframework spring-context 5.1.5.RELEASE

范例:
appliactionContext.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
       http://www.springframework.org/schema/beans/spring-beans.xsd">
    <!--注入bean
        id相当于当前bean唯一标识
        class是bean 的全路径
        property注入bean中的属性         必须封装
    -->
    <bean id="studentBean" class="com.spring.entity.StudentBean">
        <property name="stu_id" value="12"/>
        <property name="stu_name" value="海绵宝宝"/>
        <property name="teacherBean" ref="tacherBean"/>
    </bean>

    <bean id="tacherBean" class="com.spring.entity.TacherBean">
        <property name="tea_id" value="12"/>
        <property name="tea_name" value="派大星"/>
    </bean>   
</beans>

 }  

类2:实体类


public class StudentBean {
    private String stu_name;
    private Integer stu_id;
    private TacherBean teacherBean;

    public void say(){
        System.out.println("我的名字:"+this.stu_name+",年龄:"+this.stu_id);
    }
  }

通过获取容器注册的方法

ApplicationContext alc=new ClassPathXmlApplicationContext("applicationContext.xml");
      Animal animal = (Animal) alc.getBean("printer");   //只要这里xml注入的animal变化,就可以控制不同的更改变化
      animal.say(); 

如果注入bean时,把name值也注入进入了,那这里的值就动态变化了。

<!--注入墨盒-->
<bean id="colorink" class="cn.spring.print.ink.Colorink"></bean>
<bean id="grayink" class="cn.spring.print.ink.Grayink"></bean>
<!--纸张-->
<bean id="a4paper" class="cn.spring.print.paper.A4paper"></bean>
<bean id="b5paper" class="cn.spring.print.paper.B5paper"></bean>

<bean id="printer" class="cn.spring.print.printer.Printer">
    <property name="ink" ref="colorink"/>
    <property name="paper" ref="a4paper"/>
</bean>

其实DI就是IOC(控制反转)后,直接注入了其具体的数值

(3) AOP(面向切面编程)

利用一种称为"横切"的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将其命名为"Aspect",即切面。所谓"切面",简单说就是那些与业务无关,却为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。

使用"横切"技术,AOP把软件系统分为两个部分:核心关注点和横切关注点。业务处理的主要流程是核心关注点,与之关系不大的部分是横切关注点。横切关注点的一个特点是,他们经常发生在核心关注点的多处,而各处基本相似,比如权限认证、日志、事物。AOP的作用在于分离系统中的各种关注点,将核心关注点和横切关注点分离开来。

<think>嗯,用户想了解Spring框架的三个核心思想。我需要根据提供的引用内容来整理答案。首先,看看引用里提到的内容。引用[1]和[4]都提到了IoC控制反转,这是Spring的核心之一。然后引用[2]和[3]提到AOP面向切面编程,是另一个核心。第三个核心可能是什么呢?引用[4]的标题是Spring三大核心思想,但内容里只详细讲了IoC和AOP。可能第三个是DI依赖注入?不过引用[2]提到DI是IoC的一部分。或者可能第三个是IoC容器本身?或者引用[4]提到的IoC、DI、AOP三个?需要仔细看引用内容。引用[4]说:“Spring三大核心思想。What:全称Inversion of Control,首先得分清楚一点,IOC和MVC思想一样,同样是一种编程思想,而非一种技术。IOC思想我自己认为就是容器思想,IOC就是一个容器。”接着提到DI依赖注入,但可能在引用中没有明确第三个。不过用户的问题明确问三个核心思想,而通常Spring的核心是IoC、DI和AOP。但根据提供的引用,可能第三个是容器思想?或者可能引用[4]里的IoC、DI、AOP?需要确认。引用[2]提到两大核心是IoC和AOP,但用户问三个,可能第三个是DI。不过通常DI是IoC的实现方式。可能根据提供的资料,第三个核心思想是容器思想?或者可能用户的问题中的三个核心是IoC、AOP和DI?需要结合引用内容。引用[4]标题是Spring三大核心思想,但具体内容中主要讲IoC作为容器,DI作为依赖注入,而AOP是另一个核心。因此可能需要将IoC、DI、AOP作为三个核心思想。但需要检查引用中的具体内容。引用[4]提到:“传统的Java开发中,是直接在对象的内部通过new进行对象的创建,是程序主动创建以来对象;然而对Ioc来说,是通过Ioc容器控制对象,由Ioc容器控制外部资源的获取”,这里可能将IoC和DI结合起来。而引用[2]说Spring核心特征除了IoC和DI,还有AOP。所以可能三个核心思想是IoC、DI、AOP?但根据引用[4],可能第三个是容器思想。不过用户的问题可能期望的是IoC、AOP和另一个。可能需要综合判断,根据常规知识,Spring三大核心是IoC容器、AOP和模块化(如Spring的各种模块),但根据提供的引用,可能正确的三个核心思想是IoC控制反转、DI依赖注入和AOP面向切面编程。不过需要确认引用内容是否支持这一点。引用[2]提到两大核心是IoC和AOP,而DI是IoC的实现方式。但用户问三个核心思想,可能需要将IoC、DI、AOP作为三个。不过根据引用[4],IoC和DI可能属于同一个核心思想的不同方面。因此,可能需要调整,或者引用中的第三个核心可能没有明确提到,但根据常规知识,第三个可能是事件驱动、模块化或其他。但根据现有引用,可能第三个核心是容器管理,或者事件驱动?不过根据提供的引用,可能正确的三个核心思想是IoC控制反转、DI依赖注入和AOP。或者根据引用[4]的标题“Spring三大核心思想”,但内容里只详细讲了IoC和DI,可能第三个是AOP。所以综合起来,三个核心思想应该是IoC控制反转、DI依赖注入和AOP面向切面编程。但需要确认引用中的内容是否支持。例如引用[2]提到“Spring核心特征中除了IoC控制反转、DI依赖注入,还有一个核心就是强大的面向切面编程AOP”,但这里的“除了”可能表示三个核心:IoC、DI、AOP?或者可能引用[2]中的“两大核心”是IoC和AOP,而DI属于IoC的一部分。所以可能存在矛盾。需要仔细阅读引用内容。引用[2]原文:“Spring核心特征中除了IoC控制反转、DI依赖注入,还有一个核心就是强大的面向切面编程AOP(Aspect Oriented Programming)的实现。”这里提到的是“除了IoC和DI,还有AOP”,所以可能三个核心是IoC、DI和AOP?或者可能作者将IoC和DI作为两个不同的核心。所以用户的问题可能需要回答这三个。但根据常规知识,IoC和DI是同一概念的不同方面,IoC是思想,DI是实现方式。可能用户的问题期望的是IoC、AOP和另一个,比如模块化或者容器。但根据现有引用,最合适的可能是IoC控制反转、DI依赖注入和AOP面向切面编程,作为三个核心思想。因此,总结三个核心思想为IoC、DI、AOP,但需要检查引用是否支持。引用[4]提到IoC和DI,但没有明确作为三个核心,但标题是三大核心思想。可能用户的问题需要回答这三个。所以最终答案应为:IoC控制反转、DI依赖注入、AOP面向切面编程。需要确认引用中的支持。引用[4]的标题是Spring三大核心思想,但内容里只详细讨论了IoC和DI,而引用[2]和[3]讨论AOP,所以可能第三个核心是AOP。因此,三个核心思想是IoC、DI、AOP。但需要看用户的问题是否接受DI作为独立的核心思想,或者是否属于IoC的一部分。根据引用[2]中的描述,将IoC、DI、AOP作为三个核心特征。因此,正确的三个核心思想应为IoC控制反转、DI依赖注入、AOP面向切面编程。</think>Spring框架的三个核心思想可总结如下: --- ### 一、IoC(控制反转) IoC(Inversion of Control)是Spring的核心容器思想。传统开发中,对象由程序主动通过`new`创建,而IoC将控制权交给容器,由容器管理对象的生命周期和依赖关系。例如,开发者不再手动创建对象,而是从Spring容器中获取对象实例。这种机制降低了代码耦合度[^4]。 关键实现: - **容器管理**:通过`ApplicationContext`等容器统一管理对象的创建和配置。 - **配置方式**:支持XML、注解或Java配置声明Bean。 --- ### 二、DI(依赖注入) DI(Dependency Injection)是IoC的具体实现方式。Spring通过DI将对象所需的依赖(如其他Bean或资源)自动注入,而非由对象自行创建。例如: ```java // 传统方式 UserService userService = new UserServiceImpl(); // Spring DI方式 @Autowired private UserService userService; // 由容器注入实例 ``` 优势: - 解耦组件依赖 - 提升代码可测试性[^2][^4] --- ### 三、AOP(面向切面编程) AOP(Aspect-Oriented Programming)通过动态代理实现横切关注点(如日志、事务)的模块化。核心概念包括: - **切面(Aspect)**:封装通用功能(如事务管理)。 - **织入(Weaving)**:将切面逻辑嵌入目标对象,Spring默认使用运行时动态代理[^3]。 示例: ```java @Aspect public class LoggingAspect { @Before("execution(* com.example.service.*.*(..))") public void logMethodCall() { System.out.println("方法被调用"); } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值