Spring 备忘录

Spring Framework

IoC容器

Spring Framework 的控制反转 (IoC) 容器,IoC 也称为依赖注入 (DI)
1.对象仅通过构造函数参数、工厂方法的参数或在 对象实例被构造 或从工厂方法返回后设置的属性来 定义它们的依赖关系(即与它们一起工作的其他对象)
2.容器在创建 bean 时注入这些依赖项。 这个过程基本上是 bean 本身通过使用类的直接构造 或诸如服务定位器模式之类的机制来 控制其依赖关系的实例化 或位置的逆过程(因此称为控制反转)


简单概括:定义依赖关系 -> 控制其依赖关系的实例化
依赖注入(DI): 基于构造函数的依赖注入和基于 Setter 的依赖注入

Spring 团队通常提倡构造函数注入,因为它允许您将应用程序组件实现为不可变对象,并确保所需的依赖项不是null

ApplicationContext接口

  • 代表 Spring IoC 容器,负责实例化、配置和组装 bean
  • 容器通过 读取配置元数据 来获取关于要实例化、配置和组装哪些对象的指令
  • 基于注解的配置元数据
    • @Autowired
      • 应用于构造函数
      • 如果目标 bean 仅定义一个构造函数开始,则不再需要对此类构造函数进行注释。但是,如果有多个构造函数可用并且没有主/默认构造函数,则必须至少对其中一个构造函数进行注释,@Autowired以指示容器使用哪一个
      • 应用于传统的setter 方法
      • @Autowired(required = false):使框架能够通过将其标记为非必需来跳过不可满足的注入点
    • @Resource
      • @Resource采用名称属性。默认情况下,Spring 将该值解释为要注入的 bean 名称。
    • @Value
      • 用于注入外部属性@value(“${xxx.xxx}”),结合@Configuration
        @PropertySource(“classpath:xxxx.yml”)

类路径扫描和托管组件

  • @Component是任何 Spring 管理的组件的通用构造型
  • @Repository在持久层(已经支持作为持久层中自动异常转换的标记)
  • @Service在服务层
  • @RestController在表示层
    • @RestController在Spring MVC 的注解由@Controller和 组成@ResponseBody
  • 自动检测类和注册 Bean 定义
    • 添加 @ComponentScan到您的@Configuration类中,其中basePackages属性是两个类的公共父包。(或者,您可以指定一个逗号或分号或空格分隔的列表,其中包括每个类的父包。)
@Configuration
@ComponentScan(basePackages = "org.example")
public class AppConfig  {
    // ...
}

基于Java的容器配置

  • 核心工件:@Configuration注释的类带@Bean注释的方法
    • @Bean注解用于表示一个方法实例化、配置和初始化一个由 Spring IoC 容器管理的新对象
    • @Configuration表明它的主要目的是作为 bean 定义的来源

对属性源的可配置层次结构的搜索操作

Spring 的Environment抽象提供了对属性源的可配置层次结构的搜索操作

ApplicationContext ctx = new GenericApplicationContext();
Environment env = ctx.getEnvironment();
boolean containsMyProperty = env.containsProperty("my-property");
System.out.println("Does my environment contain the 'my-property' property? " + containsMyProperty);

Spring StandardEnvironment 配置了两个 PropertySource 对象——一个代表 JVM 系统属性集(System.getProperties()),一个代表 系统环境变量集(System.getenv())

自定义属性源:请实现并实例化您自己的PropertySource并将其添加到PropertySources当前Environment

ConfigurableApplicationContext ctx = new GenericApplicationContext();
MutablePropertySources sources = ctx.getEnvironment().getPropertySources();
sources.addFirst(new MyPropertySource());
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值