Spring注解驱动开发

容器

  1. 使用@Configuration来创建一个配置类
  2. 使用@Bean为容器中注册一个组件
  3. 使用@Import快速注册一个组件
    1. 实现ImportSelector接口,返回数组对象,里面包含了全类名
  4. 使用@ComponentScan来快速扫描所有包
    1. excludeFilters : 实现TypeFilter,过滤类型为Custom
    2. includeFilters
  5. @Conditional用于类上或是方法上,用来过滤判断是否注册该实例对象,具体规则需要自创建类实现Condition
  6. @Lazy : 是否进行懒加载
  7. @FactoryBean : 自定义一个类的工厂类,定义获取类的方法,可以定义为单例或是多例.

生命周期

initMethod

  1. Bean的生命周期

    1. bean的创建---初始化---销毁的过程
    2. 容器管理bean的生命周期
    3. 我们可以自定义初始化和销毁方法,容器在bean进行到当前生命周期的时候来调用我们的初始化方法和销毁方法
  2. 构造(对象创建):

    1. 单实例: 在容器启动的时候创建对象
    2. 多实例: 在每次获取的时候创建对象
  3. 初始化

    1. 对象创建完成,并赋值好,调用初始化方法
  4. 销毁:

    1. 单实例在容器关闭的时候,进行销毁
    2. 多实例在容器关闭的时候,不会进行销毁
  5. 指定初始化方法:

    1. 指定init-method或是destory-method

@Value

  1. 使用@Value进行赋值
    1. 基本数值
    2. 可以使用#{}
    3. 使用${},取出配置环境变量中的值

@PropertySource

  1. 使用@PropertySource读取外部配置文件的kv,然后保存到运行的环境变量中
  2. @PropertySource(value={"classpath:/good.properties"})

自动装配

  1. Spring利用依赖注入,DI,完成对IOC容器中各个依赖组件

  2. @Autowired: 自动注入

             BookService {
                 // 1. 优先根据类型去容器中找对应的组件,如果找到相同类型的组件,2. 再将属性的名称作为组件的id去查找 
                 @Autowired
                 BookDao bookDao
             
             }
    
  3. @Qualifier : 可以明确指定需要装配组件的ID,而不是使用属性名

  4. 使用@Autowired的属性required是否必须装配

  5. @Primary : 让Spring进行自动装配的时候,默认使用首选的Bean,如果要装配其他的,就使用@Qualifier

    1. 常用于DataSourceTransactionManager
  6. Spring还是支持@Resource和@Inject,这两个注解是Java规范注解

    1. @Resouce : java规范,spring也支持,但是是默认按照属性名称来装配,有个name属性,没有能支持@Primary的功能
    2. @Inject : 需要导入javax.inject包,和@Autowired是一样的,但是没属性
  7. @Autowired可以标注在方法上和构造器上

    1. 标注在方法上: @Bean + 方法参数,参数从容器中获取
    2. 标注在构造器上,如果组件只有一个有参构造器,这个有参构造器的@Autowired可以省略,参数位置组件
    3. 放在参数位置上,注入

自动装配Aware注入Spring底层组件原理

  1. 自定义组件如果想要实现Spring底层的一些组件,ApplicationContext,BeanFacotry

    1. 自定义组件实现xxxAware,在创建对象的时候,会自动运行实现的方法
  2. 把Spring底层的一些主键注入到bean中:

    1. XXXAware : 功能是使用xxxProcessor
      1. ApplicationContext ==> ApplicationContextAwareProccessor

Profile

  1. Spring为我们提供的根据当前环境,动态的激活和切换一系列的组件的功能:

    1. 开发环境
    2. 测试环境
    3. 生产环境
  2. 数据源:A/B/C

  3. @Profile : 指定组件在哪个环境的情况下才能被注册到容器,不指定,在任何环境下,都能注册这个组件

    1. 如果加了环境表示的Bean,只有这个环境被激活了,才能注册到容器中来
    2. 如果有一个@Profile("default") : 默认是Default环境
  4. 激活方式

    1. 使用命令行动态参数: 在虚拟机参数位置加载,-Dspring.profiles.active=test
    2. -Dspring.profiles.active=test
  5. 使用代码方式

             // 0. 使用无参数的构造函数
             AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
             // 代码方式
             // 1. 创建一个applicationContext
             // 2. 设置需要激活的环境
             context.getEnvironment().setActiveProfiles("dev");
             // 3. 注册主配置类
             context.register(ProfileAnnoConfige.class);
             context.refresh();
             
             String[] beanDefinitionNames = context.getBeanDefinitionNames();
             for (String string : beanDefinitionNames) {
                 System.out.println(string);
             }
    
  6. 如果是写到配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能开始生效.

  7. 没有标注环境表示的Bean,在任何环境下面都会加载

你可能感兴趣的:(Spring注解驱动开发)