spring注解驱动(一)

spring注解驱动(一)


@Configuration

作用于类上,指定当前类是一个配置类,相当于配置spring的容器(应用上下文)。

@Bean

作用域方法上,将方法的返回值作为bean对象放入spring容器中,如果没有指定bean的名称,默认是方法名。

@ComponentScan

配置启动时,要扫描的包路径。
可以配置过滤器表示过滤包的规则。
includeFilters:指定扫描时,包含哪些扫描组件,如果没有禁用默认的扫描规则,除了当前注解中包含的外,还会扫描默认规则的所有组件。可以通过置useDefaultFilter=false来禁用默认扫描规则,那么就只会扫描当前包含过滤的包路径下的包。
excludeFilters:指定扫描时,按照什么规则排除不需要扫描的组件。
@Filter: 指定过滤的规则。
其中type属性包含5中类型的过滤规则,如下:

public enum FilterType {
    ANNOTATION,  //通过指定注解类型
    ASSIGNABLE_TYPE,	//通过指定类型
    ASPECTJ,	//通过使用aspectj表达式
    REGEX,		//通过正则表达式
    CUSTOM;		//自定义类型

    private FilterType() {
    }
}

自定义过滤规则:
通过实现TypeFilter接口,并重写match方法,方法返回true,表示匹配成功,false表示匹配失败。

public class MyTypeFilter implements TypeFilter {
    public boolean match(MetadataReader metadataReader, MetadataReaderFactory metadataReaderFactory) throws IOException {
    	//获取当前类注解的信息
        AnnotationMetadata annotationMetadata = metadataReader.getAnnotationMetadata();
        //获取当前正在扫描类类的信息
        ClassMetadata classMetadata = metadataReader.getClassMetadata();
        //获取当前类资源(类的路径)
        Resource resource = metadataReader.getResource();
        return false;
    }
}

参数说明:
metadataReader:读取到的当前正在扫描的类的信息
metadataReaderFactory:可以获取到其他任何类的信息

@Scope

prototype: 多实例的,在容器启动时,不会创建对象放入容器,而是在获取对象时才调用方法创建对象。

singleton: 单实例的(默认值),在ioc容器启动时,会调用方法创建对象,放入容器中,以后需要使用对象时,直接冲容器中拿。

request: 同一个请求创建一个实例

session: 同一个session创建一个实例

@Lazy

对于但实例而言的,当容器启动时,就会创建对象,放入ioc容器,此注解可以使对象创建变为懒加载模式,容器创建时,并不会创建对象,而是在第一次获取对象时,才会创建.

@Conditional

对满足条件的bean对象才放入ioc容器,不满足条件的不注册。
需要自己创建一个类实现Condition接口,来设置注册条件。

@FunctionalInterface
public interface Condition {
    boolean matches(ConditionContext context, AnnotatedTypeMetadata var2);
}

结果返回true表示匹配成功,将被注册,返回false表示匹配失败,不满足注册条件。
参数:
context:表示的是判断条件能使用的上下文(环境)
var2:表示注释信息

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值