JavaInterview
  • README
  • 架构篇
    • 分布式一致性协议
    • 设计模式
    • ElasticSearch
    • MySQL
    • Redis
    • UML 图总结
  • 大数据篇
    • Hadoop 架构
    • Hive
    • Hive 函数
    • kafka_1
    • MaxList以及Set模块
  • 书籍总结
  • 代码篇
    • 动态规划(Dynamic Programming)
    • order_print_num
  • IO 篇
    • 多线程 N 次写文件
    • 多线程、进程、多核 CPU 详细介绍
  • Java 基础知识
    • 异常介绍
    • StringBuffer 和 StringBuilder
    • 线程池
    • 数据结构篇
      • BlockingQueue 和 BlockingDeque 内部实现分析
    • Java8
    • 关键字篇
      • 关键字-transient
      • 关键字-volatile
  • 深入浅出 JVM
    • garbage_collectors
    • JVM 参数
  • README
  • machinelearning
    • model
    • 推荐系统整理
    • tensorflow 入门
  • 排序篇
    • 冒泡排序
    • 基数排序
    • 选择排序
    • 插入排序
    • 希尔排序
    • 归并排序
    • 快速排序
    • 堆排序
    • 计数排序
    • 桶排序
  • Web 篇
    • JavaWeb 中 POJO、BO、VO、DO、DTO、DAO、PO 详细介绍
    • Filter 和 Interceptor 详解
    • HTTP 请求的完整过程
    • Spring 配置
    • Spring IoC
    • Spring 全家桶
Powered by GitBook
On this page
  • Spring 注解与 Java 注解
  • Spring 中 @Autowired, @Resource 和 @Inject 有何差异?
  • Spring 在 xml 如何配置 Map、List

Was this helpful?

  1. Web 篇

Spring 配置

PreviousHTTP 请求的完整过程NextSpring IoC

Last updated 5 years ago

Was this helpful?

说到 Spring,首先我们应该熟悉 Spring 里面的常用配置,以及区分开 Spring 的注解和 Java 本身自带的注解。

Spring 配置的方式可以分为:

  • 手动配置

  • 自动配置

手动配置就是在 spring 的 xml 手动去配置需要的 bean;自动配置就是使用注解,然后 Spring 自动扫描注解配置。

Spring 注解与 Java 注解

  • Spring 注解

    • @Controller

    • @RestController

    • @Service

    • @Repository

    • @Component

    • @Autowired

    • @ModelAttribute

    • @RequestBody

    • @PathVariable

    • @RequestMapping

    • @RequestParam

    • @ResponseBody

    • @ModelAttribute

    • @Cacheable

    • @CacheEvict

    • @Scope

  • Java 注解

    • @Resource

    • @PostConstruct

      被 @PostConstruct 修饰的方法会在服务器加载 Servlet 的时候运行,并且只会被服务器调用一次,类似于 Servlet 的 init()方法。被 @PostConstruct 修饰的方法会在构造函数之后,init() 方法之前运行。

    • @PreConstruct

      被 @PreConstruct 修饰的方法会在服务器卸载 Servlet 的时候运行,并且只会被服务器调用一次,类似于 Servlet 的 destroy() 方法。被 @PreConstruct 修饰的方法会在 destroy() 方法之后运行,在 Servlet 被彻底卸载之前。

  • 自定义注解(annotation)

Spring 中 @Autowired, @Resource 和 @Inject 有何差异?

三个注释中的两个属于 Java 扩展包:@Resource 属于 javax.annotation.Resource 包和 @Inject 属于 javax.inject.Inject 包。 @Autowired注解属于org.springframework.beans.factory.annotation包。

@Autowired

特性

说明

原理

根据类型来自动注入(ByType)

注入类型

既可以注入一个接口,也可以直接注入一个实例

限制

1.当注入一个接口时,这个接口只能有一个实现类,如果存在一个以上的实现类,那么Spring会抛出异常,因为两个同样的接口实现类,它不知道该选择哪一个来注入。 2.当注入一个实例时,跟接口类似,如果这个实例在XML配置文件中声明了两个不同的Bean,那么Spring也会抛出异常。

解决办法

@Autowired配合@Qualifier来使用,通过@Qualifier来指明要注入Bean的name。

@Resource

特性

说明

原理

如果指定了name属性, 那么就按name属性的名称装配; 如果没有指定name属性, 那就按照要注入对象的字段名查找依赖对象; 如果按默认名称查找不到依赖对象, 那么就按照类型查找。

注入类型

既可以注入一个接口,也可以直接注入一个实例

Spring 在 xml 如何配置 Map、List

  1. 使用 xmlns:util="http://www.springframework.org/schema/util 在 xml 中配置 map 和 list 的 bean。

  2. 使用 Java 自带的 @Resource(name="*") 给具体需要的元素赋值。

参考