@postconstruct注解方法没有执行_Spring提升计划Java注解装载Spring Been配置元信息

首先为大家介绍下spring 元信息的配置一些相关的知识。

配置元信息属于元编程的一部分,通过配置的方式影响容器的行为。关于spring 配置元信息大概可以分为3类

  1. Been 的元信息配置

  2. Ioc 容器配置元信息

  3. 外部化属性配置元信息

Been配置元信息

主要是你业务需要感知的,如been的id,name,属性等信息。

Ioc容器配置元信息

这里主要是指对Ioc 容器的一个控制,能够影响容器行为的信息。一般不会不会影响到业务行为,比如说传统的xml配置和注解驱动为什么会有相关的差异,都是需要通过容器配置的方式进行体现的。

外部化属性配置元信息

关于外部化配置,这部分官方文档也没有特别的说明。如在开发中常用的注解@Value ,其实就属于外部化的一个配置元信息。

配置方式

可分为如下几类:

  • 基于xml,properties等配置文件

  • 基于java注解

  • 基于java API

java 注解装载Spring Been配置元信息

现在对于通过注解方式进行元信息的配置使用加方便,项目文件结构也更加简洁。现在Springboot 项目基本上去就是去配置文件化,但对于一些配置如quartz 定时任务,shiro 安全框架的配置,个人觉得使用传统的xml 文件配置更加方便快捷,了解了spring元信息的基本知识,下面介绍下java 注解装载Spring Been配置元信息。

 Spring 模式注解

73711d4844db34adfa8f5f1ca9f099bd.png

Spring2.0之前的版本中,@Repository注解可以标记在任何的类上,用来表明该类是用来执行与数据库相关的操作(即dao对象),并支持自动处理数据库操作产生的异常

 Sring2.5版本中,引入了更多的Spring类注解,如:@Component 注解是spring 里非常核心的注解,也是一种DDD的概念,称为组件,@Configuration,@Service,@Controller,都可以称之为@Component的派生注解,这里派生要打引号,因为java里面注解是不可以继承的,这里的派生是一种元标注或元注解的方式进行操作。

2e9b27248a356cdd4c8f92031daa8932.png

元标注的方式,在一个注解上标注另一个注解,这样注解@Repostitory 等价@Component

513199ee300d89ab2cd1470805d54a75.png

注解@Configuration 同样如此

ClassPathScanningCandidateComponentProvider类在扫描Component 相关注解时都会被扫描进来,可以理解为@Component注解的派生。

二 、Spring Bean 依赖注入注解

e821acfda4af04c67c767732298937ea.png

@Autowired 默认是按照类型装配注入的,如果想按照名称来配注入,则需要结合@Qualifier一起使用,只有当找不到与类型匹配的bean才会按照名称来装备注入。@Resource 注解要求提供一个Bean 名称的属性,若该属性为空,则自动采用标注处的变量或方法名作为 Bean 的名称。@Inject和@Autowired功能差不多,比@Autowired 少一个 required 属性。

其中@Autowired 和@Inject 注解是在类AutowiredAnnotationBeanPostProcessor里进行操作的,也包括注解@Value

e3e5a3e244264047aa411ab36109afca.png

@Resource 是在CommonAnnotationBeanPostProcessor中进行操作

4a70ec547a4efa0f8e2c0352369e5e98.png

三 、Spring Bean 条件装配注解

082d6ef899e510e88ab77df6125d4c4c.png

@Profile注解:是spring为我们提供的可以根据当前环境,动态的激活和切换一系列组件的功能。例如使用生产,测试,开发不同的环境使用不同的配置文件。@Conditional:按照一定的条件进行判断,满足条件则给容器中注入bean 从Spring4.0开始 ,@Profile和@Conditional 做了整合, @Profile的实现做了些变化,是基于@Conditional实现的

d1186971c67e6bcd508937ff070d18ac.png

@Conditional 注解表示所有的条件必须成立,他们之间是and的关系

e9225898db9659ad23a288aa78cfe3e8.png

@Profile 只需实现一个条件,实现接口Condition

3d5b5998875821c0d3b35b3473f7ecce.png

四、 Spring Bean 生命周期回调注解

b562723f1d4a6d46b0b6695ebbfecee8.png

被@PostConstruct修饰的方法会在服务器加载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的inti()方法。被@PostConstruct修饰的方法会在构造函数之后,init()方法之前运行。

 被@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。

这两个注解 是在CommonAnnotationBeanPostProcessor 中支持,在构造方法中就默认设置了@PostConstruct 和 @PreDestroy 两个注解。这个是他通过另外一个生命周期操作的。

1b8c525da9943fabaee5c7a602e7ef99.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值