spring不同容器之间如何调用

本文介绍如何在Spring框架中通过不同ClassPathXmlApplicationContext容器加载Bean并实现Bean间的互相调用。具体展示了mybean1.xml中的b002 Bean如何调用mybean.xml中的b001 Bean。

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

mybean.xml文件内容

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd" default-autowire="byName"> <bean name="b001" class="com.alibaba.zj.spring.bean.B001" init-method="init"> <property name="name" value="kksadjksajk" /> </bean> <bean name="b001PostProcessor" class="com.alibaba.zj.spring.beanpost.B001PostProcessor"></bean> </beans>

mybean1.xml

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd" default-autowire="byName"> <bean name="b002" class="com.alibaba.zj.spring.bean.B002" init-method="init"> <property name="name" value="bbbbbbbbbbbbb" /> <property name="bf001" ref="b001"/> </bean> </beans>
类:B001


package com.alibaba.zj.spring.bean; public class B001 { private String name; public void init(){ System.out.println("B001 init........"); } public String getName() { return name; } public void setName(String name) { this.name = name; } }
类:B002.java

package com.alibaba.zj.spring.bean; public class B002 { private String name; private B001 b001; public void init(){ System.out.println("B002 init........"); } public String getName() { System.out.println(b001.getName()); return name; } public void setName(String name) { this.name = name; } public B001 getB001() { return b001; } public void setB001(B001 b001) { this.b001 = b001; System.out.println("B001 注入..."); } }
B001PostProcessor.java

package com.alibaba.zj.spring.beanpost; import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; public class B001PostProcessor implements BeanPostProcessor { @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("B001PostProcessor postProcessAfterInitialization..."); return bean; } @Override public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("B001PostProcessor postProcessBeforeInitialization..."); return bean; } }

调用类:Run

package com.alibaba.zj.spring; import org.springframework.context.ApplicationContext; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.support.AbstractRefreshableConfigApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import com.alibaba.zj.spring.bean.B001; import com.alibaba.zj.spring.bean.B002; public class Run { /** * @param args */ public static void main(String[] args) { ApplicationContext ctx = new ClassPathXmlApplicationContext("mybean.xml"); ConfigurableApplicationContext ctx1 = new ClassPathXmlApplicationContext(); ctx1.setParent(ctx); ((AbstractRefreshableConfigApplicationContext)ctx1).setConfigLocation("mybean1.xml"); ctx1.refresh(); B001 b001= (B001)ctx.getBean("b001"); System.out.println(b001.getName()); b001.setName("ddddddddddddddddd"); B002 b002 = (B002)ctx1.getBean("b002"); System.out.println(b002.getName()); } }

上面代码主要实现不同的ClassPathXmlApplicationContext容器加载,相互可以调用,mybean1.xml中的b002可以调用mybean.xml中的b001,这个是怎么实现的呢?

希望大家可以想一下。


后续分享~~~~~~~~~~~~~






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值