Sping 2.5的时候,还是不能抛弃主配置的xml文件的。很多基本的属性配置还是需要写在这个主配置文件中。
包扫描
即告诉spring 要去扫描哪些包下面类中的注解。如过某个类不在扫描范围了,就是配置了注解也不会被加载到spring容器中。
设置扫描表的方式,在spring主配置文件中配置:Context:component-scan, 同时导入context命名空间
<context:component-san base-package =”cn.tulingxueyan” >
<context:exclude-filter type=”” expression= “”
<context:include-filter type=”” expression= “”
</context:component >
Type的5种类型:即有五种方式来定义哪些包需要被扫描, 一般就Annotation和Assignable用得比较多。
- Annotation 根据注解的名字包含或排除
- Assignable 根据类的完整性名字:
其他三种:
- aspecj 根据切面表达式描述哪些包需要被扫描到或不被书扫描的。
- regex 根据正则表达式描述哪些包需要被扫描到或不被书扫描的。
- custom 根据自定义类MyTypeFilter来定义哪些包需要被扫描到或不被书扫描的。
所以如何将一个bean用注解的方式加入到容器。
1. 将该类所在的包包含在以上包扫描的路径下。
2. 在对应的类名上加注解。
如何为类属性注入默认值:
即用 @value为属性赋值
1. Hardcode为属性赋值.
@Value("admin")
private String name;
2. 用${}为属性赋外部属性文件中的值, 步骤如下:
1). Class 文件中加入@value注解
2). 添加一个配置文件到resources文件夹下。
3). 在主配置文件中添加配置资源文件路径
3. 用#{} Spel为属性赋值,引用其他类的属性值.
1)被引用的类已经有默认值了。
2)在属性上通过@value的SEel语句应用类中属性的值。
自动装配 @Autowired
@Autowired 加在属性上面
只要在你要装配的属性上面加上这个注解,就会自动在容器中匹配合适的值为该属性赋上默认值。
匹配规则:
- 首先根据类型去匹配
- 类型匹配多个的时候,在根据名字取匹配。这是如果名字匹配失败,就会报错。
当名字不匹配是可以通过以下方式解决:
1. 直接修改属性名字。
2. 在bean的设置名字。
@Component(“userService”),
@Service(“userService”)
3. 用Qualifier(“userServiceImpl”),设置属性名字。
4. 使用@Primary来设置主自动注入bean。当有多个同一类型的bean存在多个时,优先选择该bean而不是报错。
5. 当存在多个同一类型,但是有泛型限定符不一样的情况,会自动根据泛型限定中匹配的进行匹配。
Autowired 也可以住在方法上面,意思是把参数当中一个属性。就和前面用法一样。
和属性上的自动装配一样,首先安装参数的类型匹配,然后安装参数的名字匹配。
@DependsOn()控制bean的加载顺序, 即人为为bean设置dependency关系。默认spring会自己找出bean的依赖关系。
@Lazy,用到的时候才会加载实例化该bean。
@Scope 作用域
默认是单例。
生命周期回调的三种方式:
销毁回调:
初始化回调: