spring的两大核心思想

本文深入解析了Spring框架中的两个核心概念:IOC(控制反转)和DI(依赖注入)。介绍了如何通过Spring容器管理对象的创建和依赖关系,展示了通过配置文件实现对象实例化和依赖注入的过程。

IOC 控制反转

什么是IOC

把对象的创建权限转交给spring容器,让spring容器帮我们实例化对象,我们做的只是从spring容器中获取实例

package com.service;

import com.dao.impl.UserDaoImpl;
import com.factory.BeansFactory;
import com.service.impl.UserService;
import org.junit.Test;

public class UserServiceTest {


    /**
     *
     * JavaBean :实体类、所有的java类
     * 之前的方式调用Service
     */
    @Test
    public void testAddUser(){
        //1.实例化对象
        UserService userService =new UserService();//是我们自己创建的

        UserDaoImpl userDao = new UserDaoImpl();

        //2.调用方法
        userService.addUser();

        userDao.addUser();

    }

    /**
     * 通过工厂实例化UserService
     */

    public void testAddUser2(){

        //1.实例化工厂
        BeansFactory beansFactory = new BeansFactory("beans.properties");

        //2.通过工厂获取UserService的实例

        UserService userService =(UserService) beansFactory.getBean("userService");

        UserDaoImpl userDao =(UserDaoImpl) beansFactory.getBean("userDao");

        //3.调用对象的中的方法

        userService.addUser();

        userDao.addUser();

    }
}

DI 依赖注入

什么是依赖注入

依赖了一个spring容器注入的那个对象,在使用时需要使用set和get方法进行复制,以后还会用到其他方法

package com.dao.impl;

public class UserDaoImpl {

    public void addUser(){

    }
}

 

package com.service.impl;

import com.dao.impl.UserDaoImpl;

public class UserService {

    public UserDaoImpl getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDaoImpl userDao) {
        this.userDao = userDao;
    }

    private UserDaoImpl userDao;//这里只负责声明,spring会自动注入进来


    public void addUser(){
        System.out.println("UserServic.addUser");

        userDao.addUser();
    }
}

 

<?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>标签,指的就是javabean
    id:bean的唯一标识
    class:bean的全类名
    -->
    <bean id="userService" class="com.service.impl.UserService">
        <!--
        给userService里的userDao属性赋值
        把userDao实例注入给userService中的属性,注入的时候会调用set,get方法
        -->
        <property name="userDao" ref="userDao"/>
    </bean>


    <bean id="userDao" class="com.dao.impl.UserDaoImpl"/>


</beans>

 

 

<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("方法被调用"); } } ``` ---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值