spring全注解配置

1.容器

  1.1 容器启动

AnnotationConfigApplicationContext ioc = new AnnotationConfigApplicationContext();
ioc.register(AppConfig.class);
ioc.refresh();

或者

AnnotationConfigApplicationContext ioc = new AnnotationConfigApplicationContext(AppConfig.class);

  1.2 组件添加

@Configuration
public class AppConfig {

    @Bean
    public Red red(){
        return new Red("小红","漂亮");
    }    
}
@Configuration 声明这是一个配置类,就等同于之前的xml文件,可以在此类执行之前在xml中声明bean的操作
@Bean 给容器注册一个Bean,类型为返回值类型,id默认是用方法名作为id
@ComponentScan 扫描指定的文件
@Filter 过滤文件
@Configuration
@ComponentScan(value="com.indi",includeFilters={@Filter(type=FilterType.ASSIGNABLE_TYPE,
    classes={Red.class,Orange.class})},useDefaultFilters=false)
public class AppConfig {    
}
@ComponentScan   相关参数说明
value
指定要扫描的包名
includeFilters
指定要扫描的类型,可以自行写多个@Filter来自定义要扫描的类,注意,使用此属性要指定默认的扫描为false
useDefaultFilters
 是否启动默认的扫描
 excludeFilters  指定不扫描哪些类,和includeFilters使用方法一致
 

说明:多个ComponentScan注解的话,可以用一个ComponentScans包裹

@Repeatable(ComponentScans.class),此注解说明,当前注解重复使用的话,可以使用该注解声明另外一个注解包裹当前的注解

@Filter  相关参数说明

type FilterType.ANNOTATION 根据注解筛选
  FilterType.ASSIGNABLE_TYPE 自己定义类
  FilterType.CUSTOM 实现TypeFilter接口,根据返回值来筛选
value    
@Component
public class MyTypeFilter implements TypeFilter {
  //自己根据传递的参数来筛选
    public boolean match(MetadataReader mr, MetadataReaderFactory mrf) throws IOException {
        ClassMetadata classMetadata = mr.getClassMetadata();
        AnnotationMetadata annotationMetadata = mr.getAnnotationMetadata();
        String className = classMetadata.getClassName();
        return true;
    }
}

@Scope prototype 多实例bean,ioc容器启动并不会去调用方法创建bean,而是每次使用才会创建
  singleton 单实例bean(默认值):ioc容器启动会调用方法创建bean放到ioc容器中,以后每次就直接从容器(map)中取
  request 同一次请求创建一个实例
  session 同一个session创建一个实例
  @Scope("prototype")
    @Bean("red01")
    public Red red(){
        return new Red("小红","好看");
    }
@Lazy 此注解只针对单实例bean,加上此注解,容器启动不创建对象,第一次获取bBean的时候创建对象,并初始化

猜你喜欢

转载自www.cnblogs.com/ianhuafeng/p/12450242.html
今日推荐