8.高级装配(二)

本文深入探讨了Spring框架中处理bean歧义性的方法,包括使用首选bean和Qualifier限定符来精确控制依赖注入,同时介绍了bean作用域的设置及运行时注入的实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

8.高级装配(二)

3. 处理bean歧义性

1. 使用首选bean

  1. 标识为primary的bean将被使用,如果有多个bean标识为primary,这仍会有冲突

  2. Bean

    @Component
    @Primary
    public class Man {}
    
  3. XML

    <bean id="man" class="com.desmond.demo.Man" primary="true"></bean>
    

2. 使用Qualifier限定符

  1. 限定符用于缩小bean的范围

    public interface B {
        
    }
    
    @Component
    public class B1 implements B {
        
    }
    
    @Component
    public class B2 implements B {
        
    }
    
    @Component
    public class A {
        @Qualifier("b2")
        @Autowire
        private B b;
    }
    
  2. 为声明的bean创建自定义限定符

    public interface B {  
    }
    
    @Component
    public class B1 implements B {
    }
    
    @Qualifier("b2Custom")
    @Component
    public class B2 implements B {   
    }
    
    @Component
    public class A {
        @Qualifier("b2Custom")
        @Autowire
        private B b;
    }
    
  3. 自定义限定符

  4. 自定义一个注解,引入@Qualifier注解即可

    @Target(...)
    @Retention(...)
    @Qualifier
    public @interface B1Anno() {}
    
    @Target(...)
    @Retention(...)
    @Qualifier
    public @interface B2Anno() {}
    
    public interface B {  
    }
    
    @B1Anno
    @Component
    public class B1 implements B {
    }
    
    @B2Anno
    @Component
    public class B2 implements B {   
    }
    
    @Component
    public class A {
        @B2Anno
        @Autowire
        private B b;
    }
    

4. bean作用域

  1. 作用域

    1. 单例(Singleton)
    2. 原型(Prototype)
    3. 会话(Session), web应用
    4. 请求(Request), web应用
  2. Java

    @Scope(scopeName = WebApplicationContext.SCOPE_SESSION, proxyMode = ScopedProxyMode.INTERFACES)
    @Component
    public class ShoppingCar {
    }
    
  3. Xml

    <bean id="car" class="com.desmond.springlearning.scope.ShoppingCar" scope="session">
            <aop:scoped-proxy proxy-target-class="true"></aop:scoped-proxy>
    </bean>
    

    相当于 @Scope里的 proxyMode作用.

5. 运行时注入

  1. 占位符, ${xxx}
  2. Spring表达式SpEL #{xxx}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值