前言

在Spring框架中,有两种对容器的配置和启动方式,一种是基于XML文档的配置方式,一种则是“零配置”,即Java Based Configuration。

而在零配置中,最常见的就是单独使用@Component(及其等效注解@Controller@Repository@Service),或者共同使用@Configuration@Bean注解,这里将全部介绍。同时也会介绍几乎所有常见的注解配置

@Component

该注解是配置Bean的最基本注解,当该注解修饰一个类时,在初始化容器并扫描后,会进行基本的Bean配置。

@Component
public class Person {private Axe axe;public void setAxe(Axe axe) {this.axe = axe;}
}

这直接就相当于在容器中配置了一个id为person的bean,当然,默认id是类的首字母小写,也可以这样自定义名称:

@Component("person")

至于@Repository@Controller@Service都是@Component的变体,作用完全一致,只是为了便于区分常常用于修饰不同的类型,分别是数据层bean,控制层bean,服务层bean。

@Scope

该注解用于指定被修饰的bean的作用域,Spring中的bean一共有6种作用域:

  1. singleton单例模式,只生成一个实例
  2. prototype原型模式,每次获取bean时都会生成一个实例
  3. request,对于每一个HTTP请求都会生成一个实例
  4. session,对于每一次HTTP会话都会生成一个实例
  5. application,对于整个web应用,该bean只生成一个实例
  6. websocket,对于整个WebSocket通信,该bean只生成一个实例
    使用方法就是直接将对应的作用域名称作为value值传给@Scope
@Scope("singleton")

@Resource、@Value

这两个注解用于配置依赖项,前者用于注入容器中的bean,后者用于直接注入值。

这里注意@Resource这个注解默认时byName的,可以通过指定name属性来指定要注入的bean的id是什么,当然也可通过指定type的方式调整为byType注入

@PostConstuct、@PreDestroy

这两个注解用于生命周期回调

@Component
public class Person {// ...// ...@PostConstuctpublic void init() {System.out.println("Doing init method...");}@PerDestroypublic void destroy() {System.out.println("Doing destroy method...");}
}

@Bean

该注解一般需要配合@Configuration走CGLIB代理才能发挥出更好的作用。
实际上该注解是将该注解修饰的函数的返回值作为bean注册到容器中。

@Configuration
public class MyBean {@Bean(value = "wood", initMethod = "init")public Axe getWoodAxe() {return new WoodAxe();}@Bean("axeMan")public Person getAxeMan(Axe axe) {return axe::chop;}

这里注意,当我们使用@Bean注解时,可以通过之前的方式指定生命周期回调,但是也可通过@Bean自带的属性来指定,但是指定的必须是返回值类中有的函数(如果返回值为一个接口,接口中必须有相关的函数)

其次,@Bean注解修饰的函数可以带任意数量的形参,形参会自动执行byType的自动注入,因此需要注意当检测到多个可匹配的类时会报错。

同时,当指定bean的生命周期时,仍然是使用上述@Scope注解

并且,可以使用name属性指定该bean的名字

使用@Bean({"dataSource", "subsystemA-dataSource", "subsystemB-dataSource"})这样的形式指定大量别名

使用@Description("Provides a basic example of a bean")注解进行bean的描述注解

容器的启动

首先抛开SpringBoot的启动方式不谈,我们先来说一下怎么直接启动一个注解相关的Spring容器。

根据官方文档指出,当我们需要使用注解来开发时,应该使用AnnotationConfigApplicationContext来实例化一个Spring的容器:

public static void main(String[] args) {ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);MyService myService = ctx.getBean(MyService.class);myService.doStuff();
}

Spring学习笔记——@Configuration和@Bean注解相关推荐

  1. Spring学习笔记15--注解Bean

    传统的Spring做法是使用.xml文件来对bean进行注入或者是配置aop.事物,这么做有两个缺点: 1.如果所有的内容都配置在.xml文件中,那么.xml文件将会十分庞大:如果按需求分开.xml文 ...

  2. Spring学习笔记--自动装配Bean属性

    Spring提供了四种类型的自动装配策略: byName – 把与Bean的属性具有相同名字(或者ID)的其他Bean自动装配到Bean的对应属性中. byType – 把与Bean的属性具有相同类型 ...

  3. Spring @Configuration 和 @Bean 注解

    @Configuration 和 @Bean 注解 带有 @Configuration 的注解类表示这个类可以使用 Spring IoC 容器作为 bean 定义的来源.@Bean 注解告诉 Spri ...

  4. spring学习笔记06-spring整合junit(出现的问题,解决的思路)

    spring学习笔记06-spring整合junit(出现的问题,解决的思路) 文章目录 spring学习笔记06-spring整合junit(出现的问题,解决的思路) 3.1测试类中的问题和解决思路 ...

  5. spring学习笔记01-BeanFactory和ApplicationContext的区别

    spring学习笔记01-BeanFactory和ApplicationContext的区别 BeanFactory 和 ApplicationContext 的区别           BeanFa ...

  6. spring学习笔记03-spring-DI-依赖注入详解(通过xml配置文件来配置依赖注入)

    spring学习笔记03-spring-DI-依赖注入详解 1.概念 2.构造函数注入 3.set方法注入 4.集合的注入 需要被注入的实体对象 package com.itheima.service ...

  7. Spring学习笔记之MyBatis

    系列文章目录 Spring学习笔记 之 Springhttps://blog.csdn.net/weixin_43985478/article/details/124411746?spm=1001.2 ...

  8. 【Spring学习笔记 九】Spring声明式事务管理实现机制

    什么是事务?事务就是把一系列的动作当成一个独立的工作单元,这些动作要么全部完成,要么全部不起作用,关乎数据准确性的地方我们一定要用到事务,防止业务逻辑出错. 什么是事务管理,事务管理对于企业应用而言至 ...

  9. Spring 学习笔记----->AOP

    Spring 学习笔记----->AOP 代理模式 为什么学代理模式? 因为这就是Spring Aop的底层 代理模式的分类: 静态代理 动态代理 静态代理 生活用的例子: 房东 public ...

最新文章

  1. 【译】Asp.net MVC 利用自定义RouteHandler来防止图片盗链 (转)
  2. UNITY技巧-查找脚本被哪个场景引用
  3. JQueryEasyUI学习笔记(十一)datagrid 右键菜单,冻结列
  4. win7下搭建小程序服务器,技术开发人员告诉你微信小程序怎么做
  5. 解析几何 —— 经典题解
  6. iphone core animation教程
  7. 24个能给你的博客带来流量的网站
  8. MongoDb系列文章
  9. 热议:为什么近些年硕士生考博意愿偏低?
  10. 荣耀盒子显示服务器繁忙错误码7,【沙发管家】华为荣耀盒子的三种解决方式...
  11. catia二次开发:人机交互select,start command
  12. 利用frps进行内网穿透
  13. 华为以太网链路聚合Eth-Trunk实验
  14. 一个类的属性调用另一个类的实例
  15. 1、查询姓名中包含‘u’字母的员工记录2、同名去重3、字段计算
  16. 股票量化交易有什么优势?注意哪些风险?
  17. 2021年广东省安全员A证第三批(主要负责人)考试总结及广东省安全员A证第三批(主要负责人)试题及解析
  18. 汉高2019年第三季度销售额增长0.8%,达50.77亿欧元
  19. InfluxDB2.2及Influx安装
  20. macOS中比较好的解压缩软件:The Unarchiver

热门文章

  1. ANSYS中关于质量矩阵 刚度矩阵的提取【1】
  2. 笔记——流水线基础概念
  3. 重磅!发表在人工智能顶刊(TPAMI)上的一篇文章表示脑电与计算机视觉的交叉存在缺陷和盲点...
  4. mac下安装redis 和 redis可视化工具rdm并且连接redis
  5. 格式工厂视频压缩转码选择
  6. 手把手教你使用cmake生成contrib扩展库,以windows 10+VS2015+opencv3.3+contrib3.3为例
  7. 【Qt】 Fractal Designer 5.3 Bug Report
  8. 面料淡季就是服装的旺季
  9. 毕业一年感想~微思顾轻展望
  10. 帝国时代3java_帝国时代3-亚洲王朝