如果只需要使用Spring的IoC容器,引入spring-context的依赖即可,因为它依赖于其他必须组件,依赖关系如下:
其中spring-jcl对commons-logging做了封装。如果只使用XML配置方式,不使用注解方式,可以不引入spring-aop。
ApplicationContext接口的三个常用实现类:ClasspathXmlApplicationContext、FileSystemXmlApplicationContext、AnnotationConfigApplicationContext。
ApplicationContext采用立即加载策略,使用单例对象;BeanFactory采用延迟加载策略,适用多例对象。
创建对象的三种方法:调用默认构造器、使用实例工厂方法、使用静态工厂方法。
bean的作用范围:singleton、prototype、request、session、global-session。
bean的生命周期:singleton与容器相同,prototype在需要时创建,容器不负责销毁,由JVM销毁。
bean提供了两个属性init-method和destroy-method。
ClasspathXmlApplicationContext提供了close()方法,ApplicationContext接口没有提供这个方法。
构造器注入使用constructor-arg标签,type用于指定参数类型,index用于指定参数位置(从0开始),name用于指定参数名称(常用),value用于指定基本类型及其包装类、String类型的值,ref用于指定其他类型对象的值。
set方法注入使用property标签,name用于指定调用set方法的名称。若某些域必须进行初始化则使用构造器注入,否则使用set方法注入。
集合类型注入:array、list、set标签可以互换,map、props可以互换。
如果注解只有一个名为value的属性,则属性名可以省略。
@Autowired可以出现在变量上,也可以出现在方法上。使用注解注入时,可以省略set方法。如果有多个实现类,则在多个实现类中查找与变量名相同的bean进行匹配,如不匹配则报错。
@Autowired与@Qualifier("id")配合使用,使用指定id的对象注入。@Qualifier用在变量上时不可单独使用,用在方法参数时可以单独使用。@Resource(name="id")与以上两个注解等效。
@Value用于注入基本类型和String类型变量,可以使用SpEL表达式。注解不能注入集合类型值。
@PostConstruct和@PreDestroy
QueryRunner需要配置为多例对象。