我们也可以使用Annotation来代替XML配置文件。似乎注解是主流啊!
搜索Bean类
我们可以使用注解来为架构指明各个java类都是什么。@Component标注为一个普通的Spring Bean类。@Controller标注一个控制器组件类。@Service标注一个业务逻辑组件类。@Repository标注一个DAO组件类
有了这些注解,架构已经能够知道那都是些什么java类了。接下来我们还要告诉架构去哪里搜索这些。在xml中增加如下一行,架构就能自动地去扫描com.cm的各个子包下的java类,并把包含的所有java类都当场bean处理。bean的id是各个类的类名首字母小写,其他字母保留。或者也可以@Component("axe")指定bean实例名。
<context:component-scan base-package="com.cm"/>
此外component-scan也可以有include-filter和exclude-filter来指定Spring Bean类型。type允许我们设定annotation,assignable,regex和aspectj四中过滤器。expression指定过滤器所需要的表达式。
指定Bean的作用域
直接使用@Scope("prototyep")来标定bean的作用域。
使用@Resource配置依赖
@Resource(name="stoneAxe")来配置当前bean的依赖,相当于xml中的ref。这个注解要放在setAxe方法前面以表示stoneAxe是setAxe的一个参数。
如果直接让@Resource修饰成员变量axe,那么连setAxe方法都不需要。当修饰setAxe时,有些时候可以省略name属性,而直接根据setAxe去找有没有axe这个bean。有的话就传入对象。当修饰成员变量时,name默认与该实例变量属性同名
生命周期行为
@PostConstruct和@PreDestroy可以修饰两个方法用来指定bean的生命周期。它们就相当于xml中bean的init-method和destroy-method两个属性。
Spring3.0新特性
@DependsOn可以修饰bean类或者方法,用于指定强制初始化其它bean。如下:
@DependsOn({"steelAxe","abc"}) @Component public class Chinese implements Person{}
上述注释会要求Spring在初始化Chinese之前先初始化steelAxe和abc这两个bean。
@Lazy可以用于指定该bean的预初始化行为,是不是要架构自动初始化它。用true或者false参数指定。
Spring4.0新特性
@Autowired注解用来指定自动装配,可以修饰set方法,普通方法,实例变量和构造器。修饰set时默认采用byType自动装配,自动搜索容器中与set需要的类型一样的bean并传入。如果找到多个就发生异常。没有找到就什么也不错,也不报错。
当修饰普通方法时,架构会去看能否在容器中为方法的形参找到一个匹配的bean,如果每个形参都能找到就自动执行方法。
修饰实例变量时,会试图将容器中的与实例变量匹配的bean设置为该实例变量的值。如果是一个实例变量数组,那么久找到所有匹配的bean,传入这个数组。
@Qualifier允许通过bean的id精确配置。不常用。不光可以修饰实例变量,还可以修饰形参。
public void setAxe(@Q(“steelAxe”) Axe axe)
本文出自 “指尖轻飞” 博客,谢绝转载!
原文地址:http://mengcao.blog.51cto.com/9395052/1690650