Spring基础

146 阅读5分钟

1. 理解Spring的核心概念:

  • IoC(Inversion of Control): 熟悉IoC容器的概念,理解对象的创建、装配和管理由容器负责。
  • DI(Dependency Injection): 了解依赖注入的原理和在Spring中的实现,包括构造函数注入、属性注入等。
  • Bean: 学习如何配置和使用Spring Bean,包括在XML配置文件中定义Bean、使用注解定义Bean等。

2. Spring的AOP(Aspect-Oriented Programming):

  • AOP的基本概念: 了解切面、连接点、通知、切点等基本概念,理解AOP是如何解决横切关注点的问题。
  • AOP的实现方式: 掌握在Spring中使用XML配置和注解方式实现AOP,学会如何定义切面、切点、通知等。

3. Spring的事务管理:

  • 事务的基本概念: 了解事务的特性,如原子性、一致性、隔离性、持久性等。
  • Spring事务管理: 学习如何在Spring中配置和管理事务,包括声明式事务和编程式事务。

1. Spring框架的好处是什么?

  1. 轻量级:

    • Spring 是一个轻量级的框架,它的核心容器只需要很小的一部分API,可以灵活地选择使用其他组件。
  2. 依赖注入(DI):

    • Spring 使用依赖注入机制,通过IoC容器来管理组件之间的依赖关系,降低了组件之间的耦合度,提高了代码的可维护性和可测试性。
  3. 面向切面编程(AOP):

    • Spring 提供了 AOP 的支持,使得开发者能够更容易地实现横切关注点的功能,如事务管理、日志、安全等。
  4. 事务管理:

    • Spring 提供了声明式事务管理,简化了事务管理的配置和使用,支持编程式和声明式两种事务管理方式。
  5. 模块化:

    • Spring 框架被分为多个模块,开发者可以选择使用需要的模块,使得项目更加模块化,降低了项目的复杂性。
  6. 方便的集成:

    • Spring 提供了对各种数据源、ORM框架、消息队列、Web框架等的支持,方便了与其他技术的集成。
  7. 简化JEE开发:

    • Spring 简化了JEE(Java Platform, Enterprise Edition)的开发,提供了对JEE规范的实现,使得开发者能够更容易地构建企业级应用。

2. 什么是Spring IOC 容器

IOC(Inversion of Control) 是 Spring 框架的一个关键概念。在 IOC 中,控制权由应用程序代码转移到了框架,它负责实例化、组装和管理应用程序中的对象。

Spring IOC 容器是 Spring 框架的核心,它负责管理应用程序中的对象(Bean)。IOC 容器主要有两种类型:

  1. BeanFactory:

    • 是 Spring 框架最基本的 IOC 容器,提供基本的 IOC 容器功能,适合单例对象的简单场景。
  2. ApplicationContext:

    • 是 BeanFactory 的扩展,提供了更多的功能,如事件传播、AOP等。ApplicationContext 通常是 Spring 应用中更推荐使用的 IOC 容器。

Spring IOC 容器的工作方式是通过读取配置文件(通常是 XML 文件或者 Java 注解)来获取对象的信息,然后实例化、装配和管理这些对象。

3. 什么是基于Java的Spring注解配置? 给一些注解的例子

  1. @ComponentScan:

    • 用于指定要扫描的包,以寻找带有 @Component 注解的类,并将其注册为 Spring Bean。
    @Configuration
    @ComponentScan(basePackages = "com.example")
    public class AppConfig {
    }
    
  2. @Configuration:

    • 用于定义配置类,标记该类中包含 Spring Bean 的定义。
    @Configuration
    public class AppConfig {
    }
    
  3. @Bean:

    • 用于定义 Spring Bean,通常在 @Configuration 注解的类中使用。
    @Configuration
    public class AppConfig {
        @Bean
        public MyBean myBean() {
            return new MyBean();
        }
    }
    
  4. @Autowired:

    • 用于在属性、构造函数或方法上自动装配 Bean。
    @Service
    public class MyService {
        private final MyRepository repository;
    
        @Autowired
        public MyService(MyRepository repository) {
            this.repository = repository;
        }
    }
    
  5. @Qualifier:

    • @Autowired 结合使用,用于指定要注入的具体 Bean 的名称。
    @Service
    public class MyService {
        private final MyRepository repository;
    
        @Autowired
        public MyService(@Qualifier("myRepository") MyRepository repository) {
            this.repository = repository;
        }
    }
    

这些注解使得配置更加简洁,提高了代码的可读性,并且可以减少对 XML 配置文件的依赖。

4. 什么是spring?

Spring:

Spring 是一个开源的轻量级框架,用于构建企业级应用。它提供了一套全面的基础设施、核心功能和可选的扩展,使得开发者能够更容易地构建和管理 Java 企业应用。

5. 解释AOP模块?

AOP(Aspect-Oriented Programming)是 Spring 框架的一个核心模块,它允许开发者在应用程序的不同模块中提取横切关注点,如日志、事务管理、安全等,使得这些关注点能够被集中管理。

在 Spring 中,AOP 提供了一种方式来将横切关注点模块化,通过切面(Aspect)将这些关注点切入到应用程序的执行流程中。AOP 的关键概念包括切面、连接点、通知、切点等。

6. 什么是Spring的依赖注入?

依赖注入(Dependency Injection,DI)是 Spring 框架的一个关键特性,它是一种通过 IoC(Inversion of Control)容器来管理组件之间依赖关系的方式。在依赖注入中,对象不再负责创建和管理它依赖的对象,而是由容器负责将依赖关系注入到对象中。

在 Spring 中,依赖注入有两种主要方式:

  1. 构造函数注入:

    • 通过构造函数向对象注入依赖。
    public class MyService {
        private final MyRepository repository;
    
        public MyService(MyRepository repository) {
            this.repository = repository;
        }
    }
    
  2. 属性注入:

    • 通过 setter 方法或直接注入属性来实现依赖注入。
    public class MyService {
        private MyRepository repository;
    
        public void setRepository(MyRepository repository) {
            this.repository = repository;
        }
    }
    

7. 在 Spring中如何注入一个java集合?

在 Spring 中,可以使用 @Autowired 注解搭配 @Qualifier 或者 @Resource 注解来注入 Java 集合。例如,注入一个 List

@Component
public class MyComponent {
    @Autowired
    @Qualifier("myList")
    private List<String> myList;
}

8. 解释towired 注解?

@Autowired 注解:

@Autowired 注解是 Spring 框架中用于进行自动装配的注解。它可以用在字段、构造函数、Setter 方法等地方,告诉 Spring 框架在运行时自动地将相应类型的 Bean 注入到被标注的位置。

@Component
public class MyService {
    private MyRepository repository;

    @Autowired
    public MyService(MyRepository repository) {
        this.repository = repository;
    }
}

在上述例子中,MyRepository 类型的 Bean 会被自动注入到 MyService 类的构造函数中。@Autowired 注解省略了手动进行构造函数参数的设置,提高了代码的简洁性和可读性。