本文共 2008 字,大约阅读时间需要 6 分钟。
一:使用@Configuration和@Bean等组件替代xml方式将bean对象添加到spring容器中
- 创建一个实体类
- 创建配置类
注解解释: @Configuration:这个注解是告诉spring这是一个配置类,相当于xml文件 @Bean:给容器注册一个Bean,类型为返回值的类型,bean对象的id名称默认为方法名, 也可以自定义bean的id名称,例如:@Bean("person02"),那么这个Person对象 的id名称就是person02 - 测试类MainTest ⑴通过类型获取bean对象
注意:AnnotationConfigApplicationContext:可以实现基于Java的配置类加载Spring的应用上下文 效果:
⑵ 通过id名称获取bean对象
效果:
⑶通过类型获取bean的id名称,然后通过id名称获取bean对象
效果: 
二:自动扫描组件之@ComponentScan
- 简介 @ComponentScan主要就是定义扫描的路径从中找出标识了需要装配的类自动装配到spring的bean容器中。
- 下面我们创建web,service,dao层的类
- 创建配置类
注意: @ComponentScan:扫描com.test路径下所有包的类 - 创建测试类
注意:如上图,首先使用AnnotationConfigApplicationContext加载配置类MainConfig,获取到 ApplicationContext上下文对象,然后通过这个上下文对象去获取通过配置类扫描加载 那些使用注解创建的bean对像,例如通过@Controller,@Service,@Repository等注 解创建的bean对象。ApplicationContext上下文获取到容器中的这些对象后打印出来。 效果: 
- 下面我们在扫描加载并且创建bean对象到spring容器中时可以排除一些不需要创建的bean对象。
注意: excludeFilters:表示在扫描加载的路径下排除一些不需要加载到容器中的bean对象, 使用@Filter进行过滤,在@Filter中使用注解类型过滤, 这里我们不 需要加载 Controller和Service类型的bean对象到容器中去。 运行测试类后的效果: 
- 当然在@ComponentScan注解中还有其他的一些注解规则,例如includeFilters方法,表示 只加载创建哪些类型的bean对象。但是这个includeFilters必须和useDefaultFilters一起用才 会生效,否则不生效。
效果: 
- 上面我们使用includeFilters指定过滤规则时使用了FilterType.ANNOTATION的方式 去过滤的,其实在FilterType中还有其他的方式,如下: ⑴FilterType.ANNOTATION:是按照注解方式 ⑵FilterType.ASSIGNABLE_TYPE:是按照给定的类型,比如我们现在指定加载BookService类型。
效果:
⑶FilterType.ASPECTJ:使用ASPECTJ表达式方式(这个基本不会使用) ⑷FilterType.REGEX:使用正则表达式方式(这个不常使用) ⑸FilterType.CUSTOM:使用自定义规则方式,如下: a:创建实现了TypeFilter的类
注意: MetadataReader:表示的是读取到的当前正在扫描的类的信息 MetadataReaderFactory:表示可以获取到其他任何类信息 b:在配置类中使用我们自定义的过滤类
c:运行测试类的效果:

三:组件作用域之@Scope
- 简介 @Scope作用域它存在4种情况: a:prototype,表示多实例的,每一个获取bean对象,都会创建一次 b:singleton,表示单实例的(默认的@Scope也是单实例的),在IOC容器启动的时候就会调用方法创建 对象放到IOC容器中,以后每次获取就是直接从容器中拿。 c:request,同一次请求创建一个实例 d:session,同一个session创建一个实例
- 创建一个配置类,创建person对象,并且默认为单实例 a:配置类
b:测试类
c:效果: 
- 设置@Scope为多实例试试看效果:
测试类:
效果: 
四:懒加载之@Lazy - 简介 首先懒加载是专门针对单实例bean的。单实例bean一般是默认在容器启动的时候创建对象,而 如果我们使用懒加载后,就会变成容器启动的时候不创建对象,会在第一次使用(获取)bean对象 的时候去创建bean对象并且初始化。
- 实例:我们不使用懒加载时的效果: a:配置类
b:测试类
c:效果 
- 实例:我们使用懒加载时的效果: a:在配置类创建person对象的方法上添加懒加载
b:测试类
c:效果
转载地址:http://juql.baihongyu.com/