spring 容器常用注解,解释

spring 容器中注入组件方式
@Bean 默认是单例加载模式,getBean 获取的话,获取的是同一个对象
        @Scope 模式 single
             作用域:
                       prototype:多实例的:ioc容器启动并不会去调用方法创建对象放在容器中。
                     *                 每次获取的时候才会调用方法创建对象;
                     * singleton:单实例的(默认值):ioc容器启动会调用方法创建对象放到ioc容器中。
                     *           以后每次获取就是直接从容器(map.get())中拿,
                     * request:同一次请求创建一个实例
                     * session:同一个session创建一个实例
        @Lazy 懒加载
            默认是true 需要用的时候在创建,实例也只存在一个
        工厂方式注入组件

@Import 导入组件
        {Class 数组} 可以直接导入 Color.class,也可以通过selector or registrar 进行注册
        实现ImportSelector返回需要注册的 bean类
        实现ImportBeanDefinitionRegistrar 注册自定义的实体bean
        执行顺序:ImportSelector --> ImportBeanDefinitionRegistrar
@Conditional 有条件的注入组件,可以作用在方法上,也可以作用在类上
        需要 定义类实现 Condition ,返回true or false
#____________________________________________________________
                                                  |

FactoryBean 工厂,定义类来实现bean工厂,用工厂的方式生产bean

@ComponentScan @ComponentScan(value = {"com.ityang.service"}) 默认扫描的注解
    @Service @Controller @Configuration @Repository @Component

@ComponentScan(value = {"com.ityang.service"},
    排除 exclude
    excludeFilters = {
    @ComponentScan.Filter(
    type = FilterType.CUSTOM, 自定义
    value = MyTypeFilter.class)}) 自定义 实现TypeFilter 返回false 为加载,true不加载

srping 容器默认是单实例的,对于一个已经加载到容器中的组件,在通过@Bean的方式注入,是不行的
会出现org.springframework.beans.factory.NoUniqueBeanDefinitionException,针对这个类,spring已经加载过了
在加载到容器中是不被允许的,组件加载到容器的方式其实只能使用其中的某一种,
解决方式可以使用 @Primary 让容器知道要加载哪一个

@Autowired 依赖注入,
        默认使用 context.getBean(Color.class) 方式去容器查找,如果存在两个或者多个Color的实例,
        在使用 属性名去找 context.getBean("color") 找到就返回,如果还没有找到,就会
        会报错 NoUniqueBeanDefinitionException,因为容器中有多个Color的实例,却不能
        给这个依赖注入上
        如果使用默认的方式找不到,也会报错,因为依赖注入,必须要依赖上去的,可以设置
        @Autowired(required = false) 找不到也不要报错

   @Qualifier("bookDao"):使用@Qualifier指定需要装配的组件的id,而不是使用属性名
   @Primary : spring装配的时候优先装配的bean ,获取的时候优先使用这个注解的bean,
   Qualifier的优先级要大于Primary

@Resource
   可以和@Autowired一样实现自动装配功能;默认是按照组件名称进行装配的;
   不支持 @Primary 也支持,@Qualifier
   没有支持@Autowired(reqiured=false);

@Inject
   需要导入javax.inject的包,和Autowired的功能一样。
   但支持@Primary @Qualifier
   没有required=false的功能;

  context.getBean(Class) 与 context.getBean(name) 的相同点
  都是要求id 或者类型在容器中唯一 否则会报错NoUniqueBeanDefinitionException


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值