Spring的Annotation支持

请自行在所有的Annotation上将#换为艾特符号!

由于现在的主流Java框架受到了Rails框架的启发,开始渐渐的疏远XML配置方式,Spring也不例外,也支持使用Annotation来代替XML配置文件:

Rails框架有一套“约定优于配置”的方式,要求将不同的组件放在不同的路径下。

但是Spring没有采用这种策略,仍然要求开发人员显示的指出去搜索哪些路径下的Java类,Spring会把合适的Java类全部注册成为Spring Bean。

Spring提供了如下几个Annotation来标注Spring Bean:

#Component:标注一个普通的Spring Bean类

#Controller:标注一个控制器组件类

#Service:标注一个业务逻辑组件类

#Repository:标注一个DAO组件类

在JavaEE中使用这些组件时,应当优先考虑后三种,因为它们携带了更多的语义

然后接下来就需要在配置文件中指定搜索路径,语法如下:

<!--自动搜索指定包以及其子包的所有Bean类-->
<context:component-scan base-package="....">

除此之外,<context:component-scan.../>还包含如下两个子元素:

<include-filter.../> and <exclude-filter.../>

前者用来用于指定满足该规则的Java类会被当作Bean类处理,而后者则相反!

两者都包含如下两个属性:type 指定过滤器类型, expression指定过滤器所需要的表达式

Spring支持如下4种过滤器:

annotation,assignable,regex,aspectj。


指定Bean的作用域:
语法如右:#Scope("prototype"),当然默认作用域仍然是singleton

使用#Resource配置依赖:
一般会使用#Resource来修饰Bean类的setter方法,指定需要拿来注入的Bean的id;也就和配置文件的
<property.../>元素的ref属性有相同的效果!
当然#Resource也可以直接修饰实例变量,这时Spring会将直接使用Java EE规范的Field注入,主调Bean甚至不需要对应的setter方法
#Resource可以省略name属性,省略以后默认的注入实例的id将会和setter方法名去掉set,首字母小写后得到的子串相同!

使用#PostConstruct和#PreDestroy定制生命周期行为
本别用来指定Bean的初始化方法和销毁之前的方法,和原来配置方式的<Bean.../>标签的init-method和
destroy-method属性效果相同!

使用#DependsOn强制初始化其他Bean
一般在一个Bean即将使用其他的Bean时,为了避免出错,则会考虑强制初始化那些Bean,使用#DependsOn时可以指定一个字符串数组作为参数,每一个数组元素代表需要被强制初始化的Bean

使用#Lazy指定Bean是否取消预初始化
我们知道使用BeanFactory和ApplicationContext作为Spring容器的效果时不同的,前者不会预初始化所有的Bean,在需要的时候才初始化。而后者则相反,所以ApplicationContext作为Spring容器时在启动阶段则会有较大开销,但是这样的好处是后面的运行会很流畅,而且也可以使得错误在初始化阶段就被发现,这是用户友好的。
但是在某些情况下,我们希望某些Bean不跟随Spring容器一起初始化,就可以使用#Lazy,参数是boolean型value
如果为true,则Spring容器初始化时不会初始化该Bean

Spring4.0增强的自动装配和精确装配
分别使用#AutoWired和#Qualifier注释,相当与自动装配种的byType。个人感觉意义不大,完全可以使用其他注释代替更简单,所以这里不再阐述!



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值