1.Bean的注册
若使用注解,需要再核心包基础上追加aop的lib包。当在配置文件中指定通过注解定义bean的路径后,
Spring会自动扫描改指定路径,侦测和实例化具有特定注解的组件
指定路径包的方法为:如下所示多个包用逗号分开,指定包后其子包也被一并包含。
<context:component-scan base-package="myspring1, myspring2">
另外,还可以通过resource-pattern 来用正则表达式指定特定的注解。
context:include-filter,context:exclude-filter来特殊指定包含,不包含指定类。
特定组件注解(Spring虽然不区分他们,但是为了编码方便尽量使用对应层的组件):
@Component 基本注解,标识了一个受Spring管理的组件
@Respository:标识持久层组件
@Service:标识服务层(业务层)组件
@Controller:标识表现层组件
对于扫描到的组件,Spring有默认的命名策略:使用非限定类名,
第一个字母小写(比如Person类,默认生成的bean名字为person)。
也可以在注解中通过value属性值标识组件的名称。
用base-package被指定扫描对象,并且通过上面的注解进行注解后,
相应的类文件右上角会标识为s,代表是Spring的特殊文件。
2.Bean间相互引用。
<context:component-scan>元素由于自动注册了AutowiredAnnotationBeanPostProcessor实例,所以,通过@Autowired注解放置到字段,构造器,或者有参数的方法上面,可以被自动引用。
例如下面的自动装配,在调用时,会自动找系统中被定义的car bean.
若定义了required=false,则找不到该car bean时,会赋值为null,
若没有required=false,则找不到car bean时会报异常。
若有多个匹配对象,则抛出异常。
若有多个兼容的bean出现时,则可以通过注解的value属性给不同的注解起不同的名字。
还可以通过@Qualifier指定不同的注解。
@Autowired(required=false)
public void setCar(Car car){
}
<完>