介绍

使用注解配置的形式来构造bean需要首先引入 context:component-scan 的配置。他指定了 spring ioc 需要扫描的包,包下面的类将通过注解配置,构造bean对象。

例如:

<context:component-scan base-package="com.saligia.spring.bean.annotation"></context:component-scan>

@Configuration 组件

这种配置与在xml传参构造 bean 对象目的是一致的, IOC 容器初始化时候会扫描 @Configuration 注解的类,并扫描这个类下所有的 @Bean 注解的方法,并根据配置调用拿到 bean, 装载到容器中。

比如我们构造 Persion类, 我们使用 @Value 属性来设置bean字段默认值 :

public class Persion {private String name;private int value;@Value("saligia")public void setName(String name) {this.name = name;}@Value("30")public void setValue(int value) {this.value = value;}@Overridepublic String toString() {return "Persion{" +"name='" + name + '\'' +", value='" + value + '\'' +'}';}
}

我们这时候通过注解形式构造这个 bean,看一下 :

@Configuration
public class BeanConfiguraton {@Bean("persion")public Persion getPersion(){Persion persion = new Persion();return persion;}
}

这个时候我们就可以通过 Persion persion = (Persion)ioc.getBean("persion"); 的方式拿到这个bean对象。

@Configuration 使用 properties 注入变量

使用外置的 properties 外部属性文件配置的时候需要加入一个配置依赖。location 属性指定属性文件位置。

<context:property-placeholder location="classpath:system.properties"></context:property-placeholder>

例如,我们的属性文件内容为:

sys.name:saligia
sys.value:20

我们将 Persion 中的 @Value 修改为使用占位符来表示即可 :

@Value("${sys.name}")
@Value("${sys.value}")

自动装配:

当我们字段依赖于其他 bean 时候, 我们可以通过 bean 的自动装配功能来实现。

@Autowired 注解可以帮助我们实现自动装配的功能, 注解可以用来修饰 变量名setter 方法。
这时,容器将扫描所有的 bean, 找一个类型匹配的bean自动注入到修饰变量中

public class Persion {private String name;private int value;private Address address;@Value("saligia")public void setName(String name) {this.name = name;}@Value("30")public void setValue(int value) {this.value = value;}@Autowiredpublic void setAddress(Address address){this.address = address;}
}

如果 ioc 容器匹配到了多个相同类型的bean, 如下所示, 则注入过程会报失败。

@Configuration
public class BeanConfiguraton {@Bean("persion")public Persion getPersion(){Persion persion = new Persion();return persion;}@Bean("address1")public Address getAddress1(){return new Address("address1");}@Bean("address2")public Address getAddress2(){return new Address("address2");}
}

这个时候我们就需要借助 @Qualifier 注解, 这将使用 setBean 的 byName 方式。

@Autowired
@Qualifier("address1")
public void setAddress(Address address){this.address = address;
}

如果没有启用 @Qualifier 的多个相同类型的Bean的场景, 我们可以使用 @Primary 属性来为bean 指定一个首选着。

@Bean("address1")
@Primary
public Address getAddress1(){return new Address("address1");
}@Bean("address2")
public Address getAddress2(){return new Address("address2");
}

特殊的 Bean :

  • @Component: 通用的构造型注解,标识该类为spring组件[不推荐使用]
  • @Controller: 标识将该类定义为SpringMVC的控制器 ==> Controller层
  • @Service: 标识将该类定义为业务服务==> Service层
  • @Repository: 标识将该类定义为数据仓库==> Dao层

目前4种注解意思是一样,并没有什么区别,区别只是名字不同。使用方法:

@Component
public class Message {private String message ;@Value("testMessage")public void setMessage(String message) {this.message = message;}@Overridepublic String toString() {return message;}
}

使用这个注解将自动将这个类加入 IOC容器中。我们也可以为 Bean 这是Name 如:@Component("message")

Bean 初始化与释放

实现初始化和销毁bean之前进行的操作,只能有一个方法可以用此注释进行注释,方法不能有参数,返回值必需是void,方法需要是非静态的。
例如:

@Component("message")
public class Message {private String message ;@PostConstructpublic void init(){System.out.println("init Message");}@Value("testMessage")public void setMessage(String message) {this.message = message;}@PreDestroypublic void destroy(){System.out.println("destroy Message");}
}

懒加载(@Lazy(true))

用于指定该Bean是否取消预初始化,用于注解类,延迟初始化。

SpringBean篇 (2) 注解配置形式相关推荐

  1. spring之旅第四篇-注解配置详解

    spring之旅第四篇-注解配置详解 一.引言 最近因为找工作,导致很长时间没有更新,找工作的时候你会明白浪费的时间后面都是要还的,现在的每一点努力,将来也会给你回报的,但行好事,莫问前程!努力总不会 ...

  2. SpringCloud(第 054 篇)简单 Quartz-Cluster 微服务,采用注解配置 Quartz 分布式集群...

    2019独角兽企业重金招聘Python工程师标准>>> SpringCloud(第 054 篇)简单 Quartz-Cluster 微服务,采用注解配置 Quartz 分布式集群 一 ...

  3. SpringCloud(第 054 篇)简单 Quartz-Cluster 微服务,采用注解配置 Quartz 分布式集群... 1

    SpringCloud(第 054 篇)简单 Quartz-Cluster 微服务,采用注解配置 Quartz 分布式集群 - 一.大致介绍 1.因网友提到有没有采用注解式配置的Quartz例子,因此 ...

  4. Spring AOP之注解配置篇

    AOP注解使用必要配置 在进行 AOP 注解配置前我们需要先在我们的配置文件中加入如下配置: <context:component-scan base-package="cn.zhuo ...

  5. spring IOC基本配置(xml配置和注解配置)

    目录 Spring IOC IOC是什么 IOC可以做什么 依赖注入 IOC和DI IOC容器 Bean 配置IOC容器 spring ioc 依赖 XML配置 实例化容器 使用容器 xml配置详解 ...

  6. DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描...

    DB数据源之SpringBoot+MyBatis踏坑过程(三)手工+半自动注解配置数据源与加载Mapper.xml扫描 liuyuhang原创,未经允许禁止转载    系列目录连接 DB数据源之Spr ...

  7. AOP底层原理与注解配置详解

    注解开发AOP制作步骤: 在XML格式基础上 导入坐标(伴随spring-context坐标导入已经依赖导入完成 开启AOP注解支持 配置切面@Aspect 定义专用的切入点方法,并配置切入点@Poi ...

  8. Spring详解(四)------注解配置IOC、DI

    Annotation(注解)是JDK1.5及以后版本引入的.它可以用于创建文档,跟踪代码中的依赖性,甚至执行基本编译时检查.注解是以'@注解名'在代码中存在的. 前面讲解 IOC 和 DI 都是通过 ...

  9. 深入学习Spring框架(二)- 注解配置

    1.为什么要学习Spring的注解配置? 基于注解配置的方式也已经逐渐代替xml.所以我们必须要掌握使用注解的方式配置Spring. 关于实际的开发中到底使用xml还是注解,每家公司有着不同的使用习惯 ...

最新文章

  1. Centos7多内核情况下修改默认启动内核方法
  2. 卡特兰数(Catalan number)
  3. 要命的定义函数。。。参数组合。请认真理解!
  4. 推荐系统CTR预估学习路线:引入注意力机制
  5. Power BI:M与DAX以及度量与计算列
  6. jsbridge原理_React Hooks 原理与最佳实践
  7. Linux学习之打印进程树
  8. c++--类的作用域
  9. Scala编程指南——用更少的字做更多的事
  10. 统计函数应用之SQL 分析函数
  11. 修改mysql的authen_MySQL连接抛出Authentication Failed错误的分析与解决思路
  12. win10浏览器闪退_win10系统ie打不开闪退怎么办
  13. 国内支持原生android吗,定制安卓和原生Android到底有哪些不同之处?彻底真相了...
  14. 国内外镜像下载合集(详细最终版)
  15. 办工长时间使用计算机复印机,项目经理部管理制度汇编
  16. 反恐精英代码_游戏《反恐精英:全球攻势》《军团要塞2》源代码遭泄露
  17. BUUCTFweb比赛做题记录
  18. 车载网络测试 - UDS诊断篇 - 诊断RID/IOID($2F/$31)
  19. ogg转mp3格式转换器
  20. 小D课堂 - 新版本微服务springcloud+Docker教程_汇总

热门文章

  1. 大数据研究的若干科学问题——徐宗本
  2. bimodal or multimodal data test and analysis in R
  3. 图像的峰值信噪比(peak signal to noise ratio, PSNR)
  4. 操作系统中pv操作用c语言,操作系统-pv操作.doc
  5. appium安装及使用
  6. go安装与hey压测
  7. TabLayout选中
  8. AForge学习笔记(5):AForge.Imaging(下)
  9. 联想Y450 MAC系统SD读卡器驱动
  10. C语言中,%m.ns 的含义