You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Java配置实现Spring代理对象的注入(替代XML配置)

Spring Java Config实现代理对象注入Documentarist属性

原始XML配置

通过ProxyFactoryBean创建代理对象,并注入到Documentarist的guitarist属性:

<bean id="proxy"
        class="org.springframework.aop.framework.ProxyFactoryBean"
        p:target-ref="john" p:interceptorNames-ref="advisorNames">
</bean>

<bean id="documentarist"
        class="com.aop.declarative.Documentarist"
        p:guitarist-ref="proxy" />

当前Java Config问题

现有Java配置中,documentarist.setGuitarist(guitarist());直接注入了原始Guitarist实例,而非ProxyFactoryBean生成的代理对象,需要调整实现逻辑。

修改后的Java Config实现

方式一:手动调用FactoryBean的getObject()

@Bean
public ProxyFactoryBean proxy() {
    ProxyFactoryBean factoryBean = new ProxyFactoryBean();
    factoryBean.setTarget(guitarist());
    factoryBean.setProxyTargetClass(true);
    factoryBean.addAdvisor(pointcutAdvisor());
    return factoryBean;
}

@Bean
public Documentarist documentarist() {
    Documentarist documentarist = new Documentarist();
    // 通过ProxyFactoryBean的getObject()获取代理对象
    documentarist.setGuitarist((Guitarist) proxy().getObject());
    return documentarist;
}

方式二:方法参数注入(推荐)

利用Spring对FactoryBean的自动解析能力,直接通过方法参数注入代理对象,更符合Java Config最佳实践:

@Bean
public ProxyFactoryBean proxy() {
    ProxyFactoryBean factoryBean = new ProxyFactoryBean();
    factoryBean.setTarget(guitarist());
    factoryBean.setProxyTargetClass(true);
    factoryBean.addAdvisor(pointcutAdvisor());
    return factoryBean;
}

@Bean
public Documentarist documentarist(Guitarist proxyGuitarist) {
    Documentarist documentarist = new Documentarist();
    documentarist.setGuitarist(proxyGuitarist);
    return documentarist;
}

说明

  • Spring中ProxyFactoryBean是FactoryBean接口实现类,Spring会自动处理其getObject()方法,返回实际的代理对象。
  • 方式二中,Spring会自动识别proxy()方法返回的ProxyFactoryBean,并将其生成的Guitarist代理对象注入到documentarist()方法的参数中,无需手动处理。

内容的提问来源于stack exchange,提问作者Krishnnakumar R

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 21:03:25