基于注解开发spring

40 篇文章 1 订阅
13 篇文章 0 订阅

目录

@Configuration

@Bean

@ComponentScan

        1.basePackages属性:用于设置可以扫描到的注解所在包的范围,也就是原本扫描标签的value值。

        2.includeFilters属性:该属性是一个数组,用于拦截除指定bean以外的所有注解bean

        3.excludeFilters属性:该属性是一个数组,用于拦截所有指定bean

@Filter

1.type属性:用于设置拦截的方式:

2.classes属性:用于设置按照拦截方式所属的拦截类

3.当使用自定义拦截器拦截时,关于自定义拦截器的书写

@Import

导入方式:

1.直接导入

2.通过ImportSelector实现类导入

FactoryBean工厂Bean


@Configuration

        设置该类为注解配置类,该类的作用为配置配置文件相关信息

@Bean

    @Bean
    public Person person(){
        return new Person("张三");
    }

        作用在方法上,用于注册bean实例,类似原来的bean标签,使用@Bean注解后的方法用于注册bean实例,方法的返回值为原来的class属性,方法的名称为原来的id属性。如果想要重写设置id,可以将注解的返回值改成目标id。

    @Bean(value = "person1")
    public Person person(){
        return new Person("张三");
    }

@ComponentScan

用于配置扫描包的范围,

@ComponentScan(basePackages = {"com.ling"},includeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Service.class)},useDefaultFilters = false)
@ComponentScan(basePackages = {"com.ling"},includeFilters = {@ComponentScan.Filter(type = FilterType.ASSIGNABLE_TYPE,classes = UserDao.class)},useDefaultFilters = false)
@ComponentScan(basePackages = {"com.ling"},excludeFilters = {@ComponentScan.Filter(type = FilterType.ANNOTATION,classes = Controller.class)})
@ComponentScan(basePackages = {"com.ling"},excludeFilters = {@ComponentScan.Filter(type = FilterType.CUSTOM,classes = ServiceFilter.class)})

        1.basePackages属性:用于设置可以扫描到的注解所在包的范围,也就是原本扫描标签的value值。

        2.includeFilters属性:该属性是一个数组,用于拦截除指定bean以外的所有注解bean

        3.excludeFilters属性:该属性是一个数组,用于拦截所有指定bean

@Filter

该标签在ComponentScan内部使用,用于表示拦截的内容

1.type属性:用于设置拦截的方式:

        FilterType.ANNOTATION:按照注解类型拦截

        FilterType.ASSIGNABLE_TYPE:按照bean类型拦截

        FilterType.CUSTOM:按照自定义拦截器拦截

2.classes属性:用于设置按照拦截方式所属的拦截类

3.当使用自定义拦截器拦截时,关于自定义拦截器的书写

       实现TypeFilter接口,重写match方法,该方法在spring扫描包时每扫描到一个类就会进行一次调用。metadataReader参数中可以获取当前扫描类的大量信息,如果该方法返回true,即为选中当前类,返回false,即为不选中。

        例如,当使用includeFilter扫描到了某个类,使得match方法正好匹配该类,返回了true,那么该类就会被选中,纳入includeFilter中,该对象就可以被加载到容器中。如果使用excludeFilter扫描到了某个类是的match方法正好匹配该类,返回了true,那么该类就会被选中,纳入excludeFilter中,该对象就不会被加载到容器中。

public class ServiceFilter implements TypeFilter {
    @Override
    public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
        AnnotationMetadata metadata = metadataReader.getAnnotationMetadata();
        ClassMetadata classMetadata = metadataReader.getClassMetadata();

        String className = classMetadata.getClassName();
        if (className.equals("com.ling.service.impl.UserServiceImpl")){
            return true;
        }
        return false;
    }
}

@Import

        用于直接导入某个类进容器

导入方式:

1.直接导入

@Import({Color.class})

2.通过ImportSelector实现类导入

@Import({MyImport.class})
public class MyImport implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata annotationMetadata) {
        return new String[]{"com.ling.pojo.Red","com.ling.pojo.Blue"};
    }
}

        实现方法selectImports的返回值,就是需要导入的类src下的路径数组。当注解导入ImportSelector实现类时,会调用该方法,将返回值所有类加载进容器,id都是类的路劲

FactoryBean工厂Bean

public class ColorFactoryBean implements FactoryBean<Color> {
    @Override
    public boolean isSingleton() {
        return false;
    }

    @Override
    public Color getObject() throws Exception {
        return new Color();
    }

    @Override
    public Class<?> getObjectType() {
        return null;
    }
}

        该bean我们在spring基础的时候学习过了,所以看看他的注册方式的特殊点就可以

    @Bean
    public ColorFactoryBean colorFactoryBean(){
        return new ColorFactoryBean();
    }

        注册方式与其他所有bean都一样,但是当返回该对象时,spring会调用他的getObject方法,放入方法的返回值对象,而不是工厂类对象。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aristocrat l

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值