7.15. 在注入中使用代理

当 bean 的生命周期相互不同时,代理用于注入。代理是运行时创建的 Bean 的子类,并覆盖 bean 类的所有非私有方法。代理将调用转发到实际 bean 实例。

在本例中,Pay mentProcessor 实例没有直接注入到 Shop。相反,代理会被注入,调用 processPayment() 方法时,代理会查找当前的 PaymentProcessor be an 实例,并对其调用 processPayment() 方法。

示例:Proxy Injection

@ConversationScoped
class PaymentProcessor
{
  public void processPayment(int amount)
  {
    System.out.println("I'm taking $" + amount);
  }
}

@ApplicationScoped
public class Shop
{

  @Inject
  PaymentProcessor paymentProcessor;

  public void buyStuff()
  {
    paymentProcessor.processPayment(100);
  }
}