Spring面试题系列-3

简介: Spring面试题系列-3


Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。

Spring的属性注入的方式有哪几种?

Spring框架提供了多种实现依赖注入的方式,以下是一些常见的属性注入方式:

  1. Set方法注入:这是通过调用对象的set方法来实现依赖注入的。在配置中,会使用<property>标签来指定要注入的属性名和值。
  2. 构造器注入:这种方式是通过有参构造函数将所需的依赖传递给对象。这要求在bean定义时指定一个与bean类中某个构造函数匹配的参数列表。
  3. P名称空间注入:这种方式主要用在p命名空间中,它是XML配置中的一种特殊注入方式,不常用。
  4. 字段注入:直接通过类的字段进行注入,但这种方式不被推荐使用,因为它破坏了封装性,且不利于编写可测试的代码。
  5. 注解方式注入:使用如@Autowired、@Resource等注解直接标记在需要注入的属性上,这是目前最常用的一种注入方式,它简化了配置并且使得代码更加清晰。
  6. @Value注解注入:这种方式主要用于注入基本类型的值或者从配置文件中读取的值,它使用@Value注解将值直接注入到字段上。
  7. 静态工厂方法注入:当bean的创建需要复杂的逻辑时,可以使用静态工厂方法来创建bean实例,并通过Spring的容器来进行管理。
  8. 实例工厂方法注入:与静态工厂方法类似,但是使用的是非静态的工厂方法来创建对象实例。

总的来说,以上是Spring框架提供的常见属性注入方式。在实际开发中,应根据具体需求和场景选择合适的注入方式,以实现高效和可维护的代码。

Spring使用注解进行装配的时候需要什么注解

Spring使用注解进行装配时,主要会用到以下几个注解:

  • **@Autowired **:这是最常用的注解之一,用于自动装配Bean。当Spring创建某个Bean的时候,会根据@Autowired注解指定的类型自动查找匹配的Bean并注入。
  • @Qualifier:有时候可能存在多个相同类型的Bean,@Qualifier可以用来指定具体需要装配的Bean的名称。
  • @Resource:这个注解与@Qualifier类似,也是用来指定具体的Bean名称进行装配。不过,@Resource是来自Java的标准注解,而@Qualifier是Spring特有的。
  • @Component:用于将类标识为组件,这样Spring会自动扫描并将其添加到应用程序上下文中。此外,还有@Repository、@Service和@Controller等注解,它们都是@Component的特化注解,用于不同层次的Bean。

除了上述注解,Spring还提供了其他一些注解,如@Value用于注入属性值,@Configuration用于定义配置类等。这些注解共同构成了Spring框架基于注解的依赖注入体系,使得开发更加便捷和灵活。

说说Spring常用的注解

以下是Spring中一些常用的注解及其用途:

  • **@Component **:这是通用的注解,用于将类标识为Spring管理的组件。它可以用于任何层次的Bean。
  • **@Controller **:专门用于Web层的Bean,通常用于标记控制器类。
  • **@Service **:用于业务逻辑层,即服务层的Bean。
  • **@Repository **:用于数据访问层,即DAO层的Bean。
  • **@Value **:用于注入基本类型的值或者从配置文件中读取的值到Bean的属性中。
  • **@Autowired **:按照类型自动装配Bean,是实现依赖注入的主要方式。
  • **@Resource **:按照名称自动装配,它与@Autowired类似,但是使用的是Java的原生注解。
  • **@Bean **:标注在方法上,表示该方法的返回值是一个Bean,应该被Spring容器管理。
  • **@ComponentScan **:用于指定Spring应该扫描哪些包以发现带有注解的类。
  • **@Configuration **:表明该类是一个配置类,通常用于Java配置而非XML配置。
  • **@Import **:允许在一个配置类中导入其他配置类的内容。
  • **@Transactional **:用于声明事务边界,通常用于服务层的方法上。
  • **@Primary **:当有多个相同类型的Bean时,用于指定优先选择哪个Bean进行装配。
  • **@Qualifier **:与@Autowired一起使用,按照名称来装配Bean。
  • **@Scope **:用于指定Bean的作用域,如singleton(单例)、prototype(多例)、request(请求)、session(会话)等。

这些注解使得Spring框架的使用更加灵活和方便,通过注解可以简化配置,提高开发效率。在实际开发中,根据不同的需求选择合适的注解来实现依赖注入和组件管理。

@Autowired和@Resource的区别

@Autowired和@Resource都是Spring框架中用于依赖注入的注解,但它们之间存在一些差异。

首先,来源不同。@Autowired是Spring提供的注解,专门用于自动装配Bean。而@Resource注解则来源于JSR-250,也就是Java自身的规范,不局限于Spring框架。

其次,装配策略不同。@Autowired默认通过byType方式注入,即Spring会查找类型匹配的Bean进行装配。而@Resource默认通过byName方式注入,即按照Bean的名称进行装配。这意味着如果接口有多个实现类,使用@Resource需要指定具体实现类的名称,而@Autowired则会按照类型自动选择合适的实现类。

此外,使用位置也有所不同。@Autowired可以标注在成员变量、set方法以及构造函数上,而@Resource通常标注在成员变量或set方法上。在实际开发中,如果接口有多个实现类,且你希望按名称装配具体的实现类,那么使用@Resource会更合适。如果你希望Spring自动根据类型装配,那么@Autowired会是更好的选择。

总的来说,虽然两者都用于依赖注入,但是它们的来源不同、装配策略不同以及使用位置也有所不同。了解这些区别有助于在实际开发中做出更合适的选择。

@Component和@Bean的区别

@Component和@Bean都是Spring框架中用于注册Bean的注解,但它们在使用方式、自定义性以及适用场景方面存在差异。

首先,使用方式不同。@Component作用于类,而@Bean作用于方法。这意味着当使用@Component时,整个类将作为Bean被注册到Spring容器中,而@Bean则定义了如何创建这个Bean实例的逻辑,通常用在配置类中的方法上。

其次,自定义性不同。@Bean注解的自定义性更强,它允许开发者在方法中定义创建Bean的具体逻辑,这在需要对Bean的创建过程进行更多控制时非常有用。例如,如果需要对第三方库中的类进行装配,而这些类不能直接添加@Component注解,那么可以通过@Bean来实现。

最后,适用场景不同。@Component通常通过类路径扫描自动侦测并装配到Spring容器中,这种方式适用于大多数标准的Bean注册场景。而@Bean则适用于需要更复杂逻辑或者手动控制Bean创建过程的场景,比如引用第三方库中的类或者在Bean创建过程中需要进行特殊处理的情况。

总的来说,@Component和@Bean都是Spring中重要的注解,它们各自适用于不同的场景。了解它们的区别有助于更好地在Spring框架中进行Bean的注册和管理。

相关文章
|
4月前
|
Java 应用服务中间件 开发者
Java面试题:解释Spring Boot的优势及其自动配置原理
Java面试题:解释Spring Boot的优势及其自动配置原理
117 0
|
25天前
|
设计模式 缓存 Java
面试题:谈谈Spring用到了哪些设计模式?
面试题:谈谈Spring用到了哪些设计模式?
|
5月前
|
消息中间件 缓存 Java
Spring Boot最经典的20道面试题,你都会了吗?
Spring Boot最经典的20道面试题,你都会了吗?
165 0
|
30天前
|
Java 程序员 Spring
Spring事务的1道面试题
每次聊起Spring事务,好像很熟悉,又好像很陌生。本篇通过一道面试题和一些实践,来拆解几个Spring事务的常见坑点。
Spring事务的1道面试题
|
1月前
|
XML 前端开发 Java
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
本文阐述了Spring、Spring Boot和Spring MVC的关系与区别,指出Spring是一个轻量级、一站式、模块化的应用程序开发框架,Spring MVC是Spring的一个子框架,专注于Web应用和网络接口开发,而Spring Boot则是对Spring的封装,用于简化Spring应用的开发。
85 0
Spring,SpringBoot和SpringMVC的关系以及区别 —— 超准确,可当面试题!!!也可供零基础学习
|
6月前
|
Java 数据库连接 数据库
spring--为web(1),富士康java面试题整理
spring--为web(1),富士康java面试题整理
|
2月前
|
XML Java 开发者
经典面试---spring IOC容器的核心实现原理
作为一名拥有十年研发经验的工程师,对Spring框架尤其是其IOC(Inversion of Control,控制反转)容器的核心实现原理有着深入的理解。
99 3
|
3月前
|
存储 缓存 Java
面试问Spring循环依赖?今天通过代码调试让你记住
该文章讨论了Spring框架中循环依赖的概念,并通过代码示例帮助读者理解这一概念。
面试问Spring循环依赖?今天通过代码调试让你记住
|
3月前
|
前端开发 Java 开发者
Spring常见面试总结(上)
Spring框架是为Java应用提供全面支持的平台,帮助开发者处理基础任务,专注于业务逻辑。它具备IOC(控制反转)和AOP(面向切面编程)等功能,支持MVC架构、事务管理和JDBC异常处理。Spring的IOC容器负责对象的创建、配置及生命周期管理。依赖注入包括构造函数、setter和接口注入等方式。`@Component`、`@Controller`、`@Repository`和`@Service`等注解用于组件识别和装配。`@Autowired`用于精确控制依赖注入。
25 0
|
5月前
|
XML 缓存 Java
大厂面试攻略:Spring框架核心要点精讲
Java SPI (Service Provider Interface) 是一种服务发现机制,允许在运行时动态加载和发现服务提供者。在数据库驱动加载中,SPI使得数据库驱动能够自动识别和注册,而无需显式加载。 Spring 是一个广泛应用的轻量级框架,核心功能包括依赖注入(DI)和面向切面编程(AOP)。不使用Spring时,开发人员需要手动管理对象的创建和依赖关系,使用Servlet等基础组件完成Web开发,以及手动处理JDBC操作。Spring通过管理Bean的生命周期和依赖关系,简化了企业级应用的开发,降低了代码的侵入性。
73 1
大厂面试攻略:Spring框架核心要点精讲