天天看点

Spring IoC容器与Bean管理24:使用注解方式实现Spring IoC五:元数据注解;(@Primary,@PostConstruct,@PreDestroy,@Scope,@Value)一:元数据注解简介二:案例演示三:Summary:和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果

说明:

(1)本篇博客的代码,沿用【Spring IoC容器与Bean管理23:使用注解方式实现Spring IoC四:自动装配注解(对象依赖注入);自动装配注解之【按名称装配注解】(@Resource)的使用;】 的s08;

(2)本篇博客的核心是@Value注解;

(3)和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果:

目录

一:元数据注解简介

二:案例演示

[email protected]注解

[email protected]注解

[email protected]注解:这个注解在日常开发中很少用到;

[email protected]注解:为某个属性设置静态数值(核心!!!)

(1)引文:@Value注解的不推荐的使用方式

(2)@Value注解的推荐的使用方式:

(3)@Value注解原理分析

(4)config.properties配置文件的几点说明 

三:Summary:和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果

元数据注解的作用:IoC容器管理对象时,提供一些辅助信息;

一:元数据注解简介

Spring IoC容器与Bean管理24:使用注解方式实现Spring IoC五:元数据注解;(@Primary,@PostConstruct,@PreDestroy,@Scope,@Value)一:元数据注解简介二:案例演示三:Summary:和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果

(1)@Primary注解:按类型装配时,如果出现多个相同类型的对象,则优先注入@Primary描述的那个对象;前面已经介绍过了;

(2)@PostConstruct注解:

          ● init-method在【Spring IoC容器与Bean管理18:Bean对象的作用域及生命周期三:对象生命周期;】中介绍过,是IoC容器对属性进行注入后,自动执行的初始化方法; 

          ● @PostConstruct注解的作用和init-method是作用类似;

(3)@PreDestroy注解:

          ● destroy-method在【Spring IoC容器与Bean管理18:Bean对象的作用域及生命周期三:对象生命周期;】中介绍过,在销毁IoC容器的过程中,会执行<bean>的destroy-method属性对应的方法;

          ● @PreDestroy注解的作用和destroy-method是作用类似;

(4)@Scope注解:设置bean的scope属性,即决定这个对象的生存周期;

           ● 在【Spring IoC容器与Bean管理16:Bean对象的作用域及生命周期一:<bean>的scope属性;(主要是【scope=singleton】和【scope=prototype】的分析和区别)】及后续的几篇文章中,介绍了bean的scope属性,并且演示了如何使用XML的方式去设置;

           ● @Scope注解,则是【使用注解方式去设置Scope属性】的方式;

(5)@Value注解:为属性注入静态数据;

二:案例演示

[email protected]注解

Spring IoC容器与Bean管理24:使用注解方式实现Spring IoC五:元数据注解;(@Primary,@PostConstruct,@PreDestroy,@Scope,@Value)一:元数据注解简介二:案例演示三:Summary:和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果

…………………………………………………… 

[email protected]注解

Spring IoC容器与Bean管理24:使用注解方式实现Spring IoC五:元数据注解;(@Primary,@PostConstruct,@PreDestroy,@Scope,@Value)一:元数据注解简介二:案例演示三:Summary:和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果
Spring IoC容器与Bean管理24:使用注解方式实现Spring IoC五:元数据注解;(@Primary,@PostConstruct,@PreDestroy,@Scope,@Value)一:元数据注解简介二:案例演示三:Summary:和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果

…………………………………………………… 

[email protected]注解:这个注解在日常开发中很少用到;

Spring IoC容器与Bean管理24:使用注解方式实现Spring IoC五:元数据注解;(@Primary,@PostConstruct,@PreDestroy,@Scope,@Value)一:元数据注解简介二:案例演示三:Summary:和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果
通过运行结果可以看到,这儿还有问题!~~~
Spring IoC容器与Bean管理24:使用注解方式实现Spring IoC五:元数据注解;(@Primary,@PostConstruct,@PreDestroy,@Scope,@Value)一:元数据注解简介二:案例演示三:Summary:和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果
这儿之所以,没有调用UserService对象的destroy()方法,是因为UserService的@Scope定义为prototype类型,则实例创建之后spring就不在管理了,它只是做了new操作而已,想要使用@preDestroy注解,则需要将scope中的参数改成singleton。

…………………………………………………… 

[email protected]注解:为某个属性设置静态数值(核心!!!)

(1)引文:@Value注解的不推荐的使用方式

Spring IoC容器与Bean管理24:使用注解方式实现Spring IoC五:元数据注解;(@Primary,@PostConstruct,@PreDestroy,@Scope,@Value)一:元数据注解简介二:案例演示三:Summary:和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果

(2)@Value注解的推荐的使用方式:

步骤一:创建配置文件
Spring IoC容器与Bean管理24:使用注解方式实现Spring IoC五:元数据注解;(@Primary,@PostConstruct,@PreDestroy,@Scope,@Value)一:元数据注解简介二:案例演示三:Summary:和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果
config.properties代表应用程序的配置信息;比如,上面的UserService的metaData就可以在config.properties中配置:
Spring IoC容器与Bean管理24:使用注解方式实现Spring IoC五:元数据注解;(@Primary,@PostConstruct,@PreDestroy,@Scope,@Value)一:元数据注解简介二:案例演示三:Summary:和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果
需要注意,这个配置文件中,如果有多个键值对,需要保证每个键都是不同的;

步骤二:加载配置文件 

config.properties文件要想被Spring识别的话,需要在applicationContext.xml文件中将其进行加载:

Spring IoC容器与Bean管理24:使用注解方式实现Spring IoC五:元数据注解;(@Primary,@PostConstruct,@PreDestroy,@Scope,@Value)一:元数据注解简介二:案例演示三:Summary:和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果
上面加载好了之后,就可以在UserService类中,使用@Value注解进行引用了:
步骤三:在需要用到配置文件中数据的地方,直接使用@Value("${}")的方式去引用数据 
Spring IoC容器与Bean管理24:使用注解方式实现Spring IoC五:元数据注解;(@Primary,@PostConstruct,@PreDestroy,@Scope,@Value)一:元数据注解简介二:案例演示三:Summary:和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果
运行,看下效果:发现,其已经成功设置属性了
Spring IoC容器与Bean管理24:使用注解方式实现Spring IoC五:元数据注解;(@Primary,@PostConstruct,@PreDestroy,@Scope,@Value)一:元数据注解简介二:案例演示三:Summary:和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果

(3)@Value注解原理分析

@Value原理:在属性上使用@Value注解:其是在运行时,将属性的访问修饰符从private修改为public,然后给属性直接赋值,设置完了之后,再将其改回到private;(即,和@Autowired和@Resource,在属性属性上使用,原理是一样的)

(4)config.properties配置文件的几点说明 

          ● 如config.properties的配置文件的使用很广泛,比如在连接数据库时,数据库的driver,url,username,password等都可以剥离出来,存放到config.priperties中:(以前做项目的时候,自己也是这么干的) 
Spring IoC容器与Bean管理24:使用注解方式实现Spring IoC五:元数据注解;(@Primary,@PostConstruct,@PreDestroy,@Scope,@Value)一:元数据注解简介二:案例演示三:Summary:和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果
          ● 一个不错的命名规则:(在实际开发中,可以考虑采用)
Spring IoC容器与Bean管理24:使用注解方式实现Spring IoC五:元数据注解;(@Primary,@PostConstruct,@PreDestroy,@Scope,@Value)一:元数据注解简介二:案例演示三:Summary:和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果

三:Summary:和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果

(1)至此,Spring核心的注解,就这些了;

(2)这些注解,只是XML配置方式的一种延伸,利用注解开发的体验比利用XMl开发体验要更好;所以,在日常开发中,注解也是主要的开发方式;

(3)和【利用XML方式实现Spring IoC容器】相比,【利用注解方式实现Spring IoC容器】是一个妥协和权衡的结果:

          ● 注解虽好,但其实这些注解依旧是写在源代码中,如果需要修改注解,还是需要修改源代码;

          ● XML方式基于配置文件,【不用修改源代码】的特性很强,但是程序员的开发体验不好;注解方式,使用方便,但注解是写死在程序中,不容易维护; 这个问题,也没办法,鱼和熊掌不可兼得;

          ● 由于Spring框架主要面向Java开发者,作为Spring这个组织来说,实现功能前提下,首先要考虑程序员使用起来是否体验好,如果任何操作都需要大量的XML配置,那么程序员肯定不爱用,那么Spring就会慢慢被淘汰掉,Spring组织也就慢慢不会盈利了;所以,Spring增加注解,也是Spring为了迎合市场(程序员的口味)来设计的;即,增加注解方式,是一个权衡的结果。

继续阅读