Spring:各种注解

1.@Conditional   按照一定的条件进行判断,当满足条件的时候,bean才注册到ioc 容器中;

 public boolean matches(ConditionContext conditionContext, AnnotatedTypeMetadata annotatedTypeMetadata) {
        Environment environment = conditionContext.getEnvironment();
        String property  = environment.getProperty("os.name");
        if(property.contains("window")){
            return  true;
        }
        return false;
    }

在bean中使用的时候

@Condinal({WindowsCondition.class})  其中是一个数组

2.@Configurable  配置类,类似老版本的app-bean.xml  

@Configurable   // 告诉spring 这是一个配置类,启动的时候需要根据这个类的配置加载相关的文件

public class MainConfig{
    main(String[] args){
    }
}

3.@Bean  //给容器注册一个bean,类型为返回值类,@Bean id 默认为方法名字,也可以自己定义@Bean("beanName");

举例:Person.class

@Bean  // 表示下面的Bean 会注册到ioc 的容器中 id= "person"

public Person person(){
    return new Person();
}

4.@ComponentScan("package") // 指定spring 启动的时候需要扫描的包,一般情况下 和@Configurable 一起使用;

@ComponentScan("com.zhou.spring") // 表示需要扫描的包, 有注解描述的文件 会扫描添加到ioc 容器中;

@Configurable   
public class MainConfig{
    main(String[] args){
    }
}

5.@lazy 懒加载:单实例bean默认是在ioc容器启动的时候就会创建对象;懒加载就是延迟创建对象,在ioc启动的时候还不加载对象,当第一次使用(获取)bean 的时候才开始创建对象,以后再次调用也不会在进行创建对象;

@Lazy
public Person peron01(){
    return new Person();
}

6.@Scope // 表示在ioc 容器中是单实例还是多实例,默认是单实例

@Scope == @Scope("singleton") //表示单实例:容器启动的时候就创建对象 并加入到容器中;之后调用不会再创建bean;
@Scope("protoType") // 表示多实例:容器创建的时候并不会创建对象,再调用的时候才开始创建对象,并且每次调用都会创建一次;
public Person Person02(){
    return new Person();
}

7,@import 

给容器中注册组件
  1、包扫描(component-scan、@Configurable) + 组件标注注解(@Controller、@Service/@Reposity/@Componet)
     2 、@Bean 导入第三方bean中的组件
      3 、 @Import[快速给容器中导入一个组件]

            1.@import(要导入容器中的组件) 组件就会自动的导入到容器中

public class Red{}
@import({Red.class})  // 快速的导入Red 文件,导入的类可以很多,所以后面的值是个shuz
@Configuration
public class MainConfig01(){
 main(String args[]){
    }

}

8.@Filter 过滤器

includeFilters 表示只包含标示的组件  excludeFilters:表示排除标示的组件

@ComponentScan(value="com.spring",excludeFilters={@ComponentScan.Filter(type=FilterType.ANNOTATION,classes = {Service.class})})

Filter.annotation 按照注解进行扫描

Filter.type  按照指定类进行扫描

Filter.custom 自定义过滤器

@ComponentScan(value = "com.spring",includeFilters = {@ComponentScan.Filter(type = FilterType.CUSTOM,classes = {MyTypeFilters.class})})

public class MyTypeFilters implements TypeFilter {

    /**
     * metaDataReader ,读取到当前正在扫描的类型信息
     * metadataReaderFactory :可以获取其他任何信息类
     * @param metadataReader
     * @param metadataReaderFactory
     * @return
     * @throws IOException
     */
    @Override
    public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
        //获取当前类注解的信息
        ClassMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
        //获取当前正在扫描的类的类信息
        ClassMetadata classMetadata = metadataReader.getClassMetadata();
        //获取当前类的资源信息(类型路劲)
        Resource resource = metadataReader.getResource();
        String className = classMetadata.getClassName();
        System.out.println("当前类型信息:"+ className );
        //过滤掉义类名以er结尾的class
        if(className.contains("er"))
            return true;
        return false;
    }
}

9.@Qualifier 

和@Autowired 类似,自动装配字段,但是遇见多个 生成相同的bean实例,可能编译器就不知道选哪个,所以就使用qualifier进行修饰

@Bean(name = "primaryDataSource")
@Qualifier("primaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.primary")
public DataSource primaryDataSource() {
    return DataSourceBuilder.create().build();
}

@Bean(name = "secondaryDataSource")
@Qualifier("secondaryDataSource")
@ConfigurationProperties(prefix = "spring.datasource.secondary")
public DataSource secondaryDataSource() {
    return DataSourceBuilder.create().build();
}
@Bean(name="primaryJdbcTemplate")
public JdbcTemplate primaryJdbcTemplate(@Qualifier("primaryDataSource") DataSource dataSource){
    return new JdbcTemplate(dataSource);
}

@Bean("secondaryJdbcTemplate")
public JdbcTemplate secondaryJdbcTemplate(@Qualifier("secondaryDataSource") DataSource dataSource){
    return new JdbcTemplate(dataSource);
}


  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值