Spring源码解读需要了解的注解

如何表明类为配置类,指定扫描加载的组件。

——1.@Configuration:该注解表示声明该类为配置类,使用此注解后,spring会自动将该类加载到容器中。

——2.@ComponentScan:在配制类下使用该注解,该注解能够配制spring扫描的包位置。
该注解还有以下功能:
includeFilters 扫描指定的组件
@Filter(type classes)
excludeFilters 扫描的时候以什么规则排除组件
@Filter(type classes)
useDefaultFilters 为true时默认扫描Component注解组件(controller、service、repository)
在这里插入图片描述

如何向spring容器中注入bean的方式

——1.@Bean:(bean的id,默认方法的名字):生成一个bean类对象放入容器中,相当于xml注解的
配合以下两个注解:
1.1@Scope:指定bean类的IOC容器加载规则
prototype:多实例,每次从容器中拿到的类都是new的类。
singleton:单实例,每次从容器中拿到的都是同一个类,容器创建完成后初始化的类。
request:主要针对web应用,递交一次请求创建一次实例。
session:同一个session创建一个实例。

1.2@Lazy:懒加载,主要针对单实例,容器启动的时候不创建对象,第一次使用的时候再创建对象。/默认在容器中启动的时候创建对象。

——2.@Conditional(xxx.class):使用此注解能够根据条件添加bean到容器中。
在这里插入图片描述

——3.@Import(value={xxx.class,…}):注册bean,快速给容器中注册一个组件。
value:可以是一个继承了以下接口的类,这些类能够指定引入的bean

ImportSelector接口

public String[] selectImports(AnnotationMetadata importingClassMedata){
	return String[]{"全限定类名","全限定类名"};
}
ImportBeanDefinitionRegistrar --条件注册bean

	public void registerBeanDefinitions(AnnotationMetadate medata, BeanDefinitionRegistry register){
		boolean bean1 = register.containsBeanDefinition("全限定类名");
		//判断容器中是否有此bean
		if (bean1){
			RootBeanDefinition beanDefinition = new RootBeanDefinition(xxx.class);//先用此类封装
			//注册一个bean
			register.registerBeanDefinition("pig", beanDefinition);
		}
	}

——4.BeanDefinition向容器中注册Bean,如上代码所示。

——关于注册bean的扩展
通过实现FactoryBean接口的方式也可以加载bean,只需要将实现的此接口的类也添加到容器中即可,spring会自动获取getObject返回的对象。(如果想要需要在FactoryBean本身需要在id前加上&符号,例如:application.getBean("&tets"))

public class tets implements FactoryBean {
    
    @Override
    public Object getObject() throws Exception {
        return new Student();//bean对象实例
    }

    @Override
    public Class<?> getObjectType() {
        return Student.class;//bean对象类型
    }

    @Override
    public boolean isSingleton() {
        return false;//是否单例
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值