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,在任何环境下面都会加载

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容

  • 1.1 spring IoC容器和beans的简介 Spring 框架的最核心基础的功能是IoC(控制反转)容器,...
    simoscode阅读 6,689评论 2 22
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,559评论 18 139
  • 1.1 Spring IoC容器和bean简介 本章介绍了Spring Framework实现的控制反转(IoC)...
    起名真是难阅读 2,566评论 0 8
  • Spring Boot 参考指南 介绍 转载自:https://www.gitbook.com/book/qbgb...
    毛宇鹏阅读 46,712评论 6 342
  • (风竹敲秋韵)独竹成林笋争春,蝉鸣声唤秋日醒。闲来清幽问宁静,风竹敲秋君未至。久候闻得蝉声声,日落黄昏风沙沙。竹影...
    甘朝武阅读 206评论 0 0