java框架-Spring-IOC

文章目录

  • 一、组件注册
    • 包扫描+组件注解
      • 0)、 @ComponentScans
      • 1)、 @RestController
      • 2)、 @Srevice
      • 3)、 @Rerpository
      • 4)、@Component
    • 导入第三方包里的组件
      • 1)、@Configuration
      • 1)、@Bean
      • 1)、@Conditional(自定义条件类)
    • @Import 快速给容器导入一个组件
      • 1)、@Import
      • 2)、interface ImportSelector
      • 3)、ImportBeanDefinitionRegistrar
    • 使用Spring提供的 FactoryBean
      • 1)、interface FactoryBean
  • 二、Bean生命周期
    • 创建
    • 初始化
    • 销毁
    • 1)、相关注解和接口
      • 1、指定初始化和销毁方法
      • 2、实现初始化和销毁接口
      • 3、JSR250
      • 4、Bean后置处理器:BeanPostProcessor
    • 2)、 Springd底层对BeanPostProcessor的使用
  • 三、属性赋值
      • @PropertySource
      • @Value
  • 四、自动装配
      • 1)、 @Autowired
        • @Qualifier:指定需要装配的bean id
        • @Primary:优先装配该Bean
        • 构造器、方法、属性同样支持,都是从容器中获取对应的Bean
      • 2)、@Resource(JSR250规范)
      • 3)、@Ingect(JSR330)
      • 4)、xxxAware:把Spring底层组件自动注册到Bean中
      • 5)、@Profile:根据环境配置给容器中注册组件

java框架-Spring-IOC_第1张图片

Spring官方文档
学习参考视频

一、组件注册

包扫描+组件注解

0)、 @ComponentScans

  • @ComponentScan
  • @ Filter

1)、 @RestController

  • @ResponseBody
  • @Controller

2)、 @Srevice

3)、 @Rerpository

4)、@Component

导入第三方包里的组件

1)、@Configuration

1)、@Bean

  • @Scope:prototype、singleton、request、session
  • @Lazy

1)、@Conditional(自定义条件类)

@Import 快速给容器导入一个组件

1)、@Import

2)、interface ImportSelector

3)、ImportBeanDefinitionRegistrar

使用Spring提供的 FactoryBean

1)、interface FactoryBean

  • 默认获取工厂bean调用getObject
  • 要获取工厂bean本身,需要在id前添加&

二、Bean生命周期

创建

  • 单例模式:容器初始化
  • 多礼模式:从容器中获取实例

初始化

  • 对象创建完成,并赋值好属性之后

销毁

  • 单实例:容器关闭的时候
  • 多实例:容器不会管理这个Bean,需要自己手动调用

1)、相关注解和接口

1、指定初始化和销毁方法

  • @Bean(initMethod=xxx, destroyMethod=xxx)

2、实现初始化和销毁接口

  • interface InitializingBean
  • interface DisposableBean

3、JSR250

  • @PostConstruct
  • @PreDestroy

4、Bean后置处理器:BeanPostProcessor

  • interface BeanPostProcessor
  • Bean初始化前执行postProcessBeforeInitialization,初始化后执行postProcessAfterInitialization
  • 整个在Bean赋值完成之后
  • ApplicationContextAware接口注入ApplicationContext的实现就是该处理器完成

2)、 Springd底层对BeanPostProcessor的使用

  • Bean赋值
  • 注入其他组件
  • @Autowired
  • 生命周期功能:注解、接口

三、属性赋值

@PropertySource

@Value

  • 基本数值
  • SpEL:#{}
  • ${},取出配置【yaml、properties】文件中的值,需要先加载配置文件到环境中

四、自动装配

1)、 @Autowired

  • 默认优先从容器中获取对应组件
  • 如果容器中存在多个相同类型Bean,根据名称注入Bean
  • required:true:必须,false:非必须
  • 由【AutowiredAnnotationBeanPostProcessor】处理器实现

@Qualifier:指定需要装配的bean id

  • 配合@Autowired使用

@Primary:优先装配该Bean

  • 配合@Bean使用

构造器、方法、属性同样支持,都是从容器中获取对应的Bean

  • 标在构造器上:如果组件只有一个有参构造器,这个有参构造器的@Autowired可以省略,参数位置的组件还是默认从容器中装配
  • 标在属性上,setf方法上
  • 标在方法:@Bean+方法参数,参数从容器中获取

2)、@Resource(JSR250规范)

  • 默认按照组件名称装配
  • 不支持required

3)、@Ingect(JSR330)

  • 需要引入pom依赖
  • 不支持required

4)、xxxAware:把Spring底层组件自动注册到Bean中

  • interface ApplicationContextAware
  • interface BeanNameAware
  • interface EmbeddedValueResolverAware

5)、@Profile:根据环境配置给容器中注册组件

  • Dspring.profile.cative=test(test为环境变量)
  • 代码方式,容器启动前设置号参数
    1、 AnnotationConfigApplicationContext annotationConfigApplicationContext = new AnnotationConfigApplicationContext();
    2、 annotationConfigApplicationContext.getEnvironment().setActiveProfiles(“test”);
    3、 annotationConfigApplicationContext.register(componentClasses);
    4、 annotationConfigApplicationContext.refresh();
  • 可以添加在方法上,也可以添加在类上

你可能感兴趣的:(java,spring,开发语言)