一、Spring配置概述
1.Spring容器的启动需要下列条件达成:
(1)Spring框架需要的类包已经放在应用程序的类路径下;
(2)bean之间的依赖关系已经配置好;
(3)bean的类已经放在应用程序类路径下。
Spring在启动时,会根据bean的配置信息在bean容器中生成bean的配置注册表,然后根据注册表生成bean的实例,装配好Bean之间的依赖关系,供应用程序调用。各部分之间的联系如下图:
2.Bean配置的元数据信息在Spring容器内部的对应物是一个个由BeanDefinition组成的配置注册表。元数据信息由4部分组成:
(1)bean的实现类
(2)bean的属性信息
(3)bean的依赖关系
(4)bean的行为信息,如生命周期scope等。
3.XML的配置
xml文件是Spring容器中配置文件的基本格式之一,它基于xml schema文件来指定命名空间,示例如下图:
(1)xmlns:默认命名空间,在Spring中用于Spring Beans的定义 ,即如果元素无前缀则默认为bean;
(2)xsi标准命名空间:用来标明自定义命名空间的schema文件及其位置;
(3)aop自定义命名空间:定义之后,可以在文中以<aop:config.../>等形式来简化元素书写。
二、基于xml的配置
1.bean的命名
(1)一般要为bean指定id属性作为bean的命名,这个命名在容器中必须要唯一。并且,要符合命名规范,以字母、下划线、连线符、数字、句号、冒号等完整结束的符号,逗号空格为非法。
(2)如果不指定id属性,则要指定name属性,这个name属性在容器中可以不唯一,使用时容器会返回name属性相同的后面的那个bean,将前面的bean覆盖掉。
(3)如果id和name属性两个都不指定,则以全限定类名为bean的名字。
2.属性注入
(1)示例:
(2)要注意java类代码中的属性的命名规范,开头两个字母要么小写要么大写,要保持一致,尽量使用驼峰命名方法。例如,iDCard,iCCard非法,IDCard,idCard则合法。
3.构造器注入
(1)按类型入参,示例:
(2)按索引入参,示例:
(3)类型和索引结合,多个构造器类似时使用,示例:
(4)根据自身类型反射入参,即根据值的类型,容器自动匹配对应类型参数,示例:
4.工厂方法注入
(1)非静态工厂方法:
(2)静态工厂方法:
5.注入参数
(1)字面值
对于基本数据类型和他们的封装类型,String类型,直接采用<value = .../>;
对于一些特殊字符,要采用替代符号,如图:
(2)引用其他Bean
上面<ref ..>里还可以有parent代替bean来表示依赖父容器里的bean,local表示本地容器里的。
(3)内部bean
内部bean只会被外部bean依赖,且bean范围系统设为prototype
(4)null值
(5)集合类
list类型:
set类型
map类型
6.p命名空间
7.lookup方法注入
相当于为MagicBoss接口提供了一个实现。
8.bean之间的关系
(1)继承
子bean中的属性会覆盖父bean中相同的属性,没有赋值的属性则会继承。
(2)依赖
使用depend-on显式依赖前置bean,则会在本bean之前实例化前置bean
(3)引用
<idref>标签会在Spring容器启动前检查引用关系的正确性,可以提前发现错误
9.bean作用域
(1)
(2)
三、基于注解的配置
1.注解
(1)@Component 表示对bean的注解,又可细分一些三种
@Repository表示对Dao层Bean的注解
@Service表示对service层的注解
@Controller表示对controller层的注解
(2)@Autowired自动根据类成员的类型装配bean,required属性默认为TRUE,表示找不到对应类型的bean时报错;
同时可以使用@Qualifier(“beanname”)表示注入对应bean名称的bean;
可以使用@Lazy延迟注入;
当标注的类型为集合类的时候,容器类型相同的bean都会注入该变量。
2.扫描注解
(1)定义扫描包
(2)过滤
(3)生命过程
@Scope(“prototype”)指定Bean作用范围
@PostConstruct和@PreDestroy指定初始和销毁前的方法
(基于java类的配置方式和Groovy DSL的配置方式省略,后面的总结有简单介绍)
四、各种配置方式的总结
参考:陈雄华《精通Spring4.x》