The IoC container
终于到了关键的内容了,IoC容器可以说是Spring的核心内容。这一点我们可以从Spring的Modules 那节的架构图看出来。
本节目录
1. Introduction to the Spring Ioc container and beans 2. Container overview 3. Bean overview 4. Dependencies 5. Bean scopes 6. Customizing the nature of a bean 7. Bean definition inheritance 8. Container Extension Points 9. Annotation-based container configuration 10. Classpath scanning and managed components 11. Using JSR 330 Standard Annotations 12. Java-based container configuration 13. Enviroment abstraction 14. Registering a LoadTimeWeaver 15. Additional Capabilities of the ApplicationContext 16. The beanFactory
6.1 Introduction to the Spring Ioc container and beans
org.springframework.beans
和org.springframework.context
是Spring 框架IoC 容器的基础包。
BeanFactory
和ApplicationContext
接口提供了对Object的各种管理功能。
6.2 Container overview
ClassPathXmlApplicationContext
和FileSystemXmlApplicationContext
是在独立应用中创建实例的类。
这是一个简单的Spring配置文件模板。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions go here -->
</beans>
根据模板的相关信息,可以实例化一个容器。并从容器中实例化对象。
// 创建容器
ApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"services.xml", "daos.xml"});
// 获取所需实例对象
PetStoreService service = context.getBean("petStore", PetStoreService.class);
// 使用对象
List<String> userList = service.getUsernameList();
6.3 Bean overview
IoC容器管理一个或多个Bean。这些Bean根据你的配置创建出来。这一块的东西很杂。
6.4 Dependencies
依赖,什么是依赖?依赖就是一个实例化一个bean需要的东西,可以是bean的属性,引用的其他bean。
- 依赖注入
- 详细的依赖和配置
- 使用depends-on
- 懒初始化的bean
- 自动注入
- 方法注入
6.5 Bean scopes
- The singleton scope
- The prototype scope
- Singleton beans with prototype-bean dependencies
- Request, session, and global session scopes
- Custom scopes
从scope的类型来看,Spring本身就使用了很多的设计模式,这样能让我们使用框架的时候就相当于使用了这些设计模式。
6.6 Customizing the nature of a bean
为bean设置初始化、销毁方法,以及一些其他的配置。
6.7 Bean definition inheritance
bean也能像类一样继承,就是不知道在不使用配置文件,用注解配置之后还能不能这么方便。
6.8 Container Extension Points
- Customizing beans using a BeanPostProcessor
- Customizing configuration metadata with a BeanFactoryPostProcessor
- Customizing instantiation logic with a FactoryBean
这里的内容我不是很能理解意义在哪里,可能是工作中没有用到吧,如果有人知道欢迎指点一下。
6.9 Annotation-based container configuration
- @Required
- @Autowired
- Fine-tuning annotation-based autowiring with @Primary
- Fine-tuning annotation-based autowiring with qualifiers
- Using generics as autowiring qualifiers
- CustomAutowireConfigurer
- @Resource
- @PostConstruct and @PreDestroy
基于注解的容器配置,感觉还是有个配置文件方便一点啊。
6.10 Classpath scanning and managed components
- @Component and further stereotype annotations
- Meta-annotations
- Automatically detecting classes and registering bean definitions
- Using filters to customize scanning
- Defining bean metadata within components
- Naming autodetected components
- Providing a scope for autodetected components
- Providing qualifier metadata with annotations
扫描添加注解的类,并默默的生成bean。这个功能海华丝特别实用的。
6.11 Using JSR 330 Standard Annotations
这个是用java原生的注解。
6.12 Java-based container configuration
- Basic concepts: @Bean and @Configuration
- Instantiating the Spring container using
AnnotationConfigApplicationContext - Using the @Bean annotation
- Using the @Configuration annotation
- Composing Java-based configurations
这里是用注解配置bean,还是特别重要的。
}
6.13 Environment abstraction
6.15 Additional Capabilities of the ApplicationContext
6.16 The BeanFactory
在写了这么多,看了这么多之后,我不禁产生了一个困惑。这么看能记得住吗,这么多东西。哪怕是把目录背下来,或者弄一个项目来实现文档中所有的功能,我觉得这些都不是学习框架最好的办法。最好的方法是让框架来适应你的需求,而不是你按照框架的功能来学习。至于如何实现,等我有了一个完整的答案,我会写出来的,现在就不乱写了。