观看慕课moocer老师视频Spring Bean装配之Aware接口

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
        
        <bean id= "moocApplicationContext" class="com.imooc.aware.MoocApplicationContext"></bean>
        
</beans>
package com.imooc.test.aware;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;

import com.imooc.ioc.interfaces.UnitTestBase;

@RunWith(BlockJUnit4ClassRunner.class)

public class TestAware extends UnitTestBase{
	
	public TestAware(){
		super("classpath:spring-aware.xml");
	}
	
	@Test
	public void testMoocApplicationContext(){
}
}
package com.imooc.aware;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class MoocApplicationContext implements ApplicationContextAware {

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) 
			throws BeansException {
		System.out.println("MoocApplicationContext:"+applicationContext.getBean("moocApplicationContext"));
	}

}

运行结果:

利用setApplicationContext方法获得配置文件里的bean。

package com.imooc.test.aware;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;

import com.imooc.ioc.interfaces.UnitTestBase;

@RunWith(BlockJUnit4ClassRunner.class)

public class TestAware extends UnitTestBase{
	
	public TestAware(){
		super("classpath:spring-aware.xml");
	}
	
	@Test
	public void testMoocApplicationContext(){
		System.out.println("testMoocApplicationContext:"+super.getBean("moocApplicationContext").hashCode());
}
}
package com.imooc.aware;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class MoocApplicationContext implements ApplicationContextAware {

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) 
			throws BeansException {
		System.out.println("MoocApplicationContext:"+applicationContext.getBean("moocApplicationContext").hashCode());
	}

}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
        
        <bean id= "moocApplicationContext" class="com.imooc.aware.MoocApplicationContext"></bean>
        
</beans>

运行结果:

说明:test里面得到的bean的实例和在bean定义实现ApplicationContextAware接口并覆盖setApplicationContext方法的时候,从这个applicationContext得到的bean的实例是一致的。也就说我们成功地把当前applicationContext成功地写到了我们的MoocApplicationContext中来。

可以用这种方式(private ApplicationContext applicationContext)来声明,用(this.applicationContext=applicationContext)来赋值,这样在其他方法中,就可以用applicationContext来进行操作。

package com.imooc.aware;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class MoocApplicationContext implements ApplicationContextAware {
	
	private ApplicationContext applicationContext;

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) 
			throws BeansException {
		this.applicationContext=applicationContext;
		System.out.println("MoocApplicationContext:"+applicationContext.getBean("moocApplicationContext").hashCode());
	}

}

获得beanId:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
        
        <!-- <bean id= "moocApplicationContext" class="com.imooc.aware.MoocApplicationContext"></bean> -->
        
        <bean id= "moocBeanName" class="com.imooc.aware.MoocBeanName"></bean>
        
</beans>
package com.imooc.test.aware;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;

import com.imooc.ioc.interfaces.UnitTestBase;

@RunWith(BlockJUnit4ClassRunner.class)

public class TestAware extends UnitTestBase{
	
	public TestAware(){
		super("classpath:spring-aware.xml");
	}
	
	/*@Test
	public void testMoocApplicationContext(){
		System.out.println("testMoocApplicationContext:"+super.getBean("moocApplicationContext").hashCode());
}*/
	
	@Test
	public void testMoocBeanName(){
		System.out.println("testMoocBeanName:"+super.getBean("moocBeanName"));
}
}
package com.imooc.aware;

import org.springframework.beans.factory.BeanNameAware;

public class MoocBeanName implements BeanNameAware {

	@Override
	public void setBeanName(String name) {
		System.out.println("MoocBeanName:"+name);
		
	}

}

运行结果:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
        
        <!-- <bean id= "moocApplicationContext" class="com.imooc.aware.MoocApplicationContext"></bean> -->
        
        <bean id= "moocBeanName" class="com.imooc.aware.MoocBeanName"></bean>
        
</beans>
package com.imooc.test.aware;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;

import com.imooc.ioc.interfaces.UnitTestBase;

@RunWith(BlockJUnit4ClassRunner.class)

public class TestAware extends UnitTestBase{
	
	public TestAware(){
		super("classpath:spring-aware.xml");
	}
	
	/*@Test
	public void testMoocApplicationContext(){
		System.out.println("testMoocApplicationContext:"+super.getBean("moocApplicationContext").hashCode());
}*/
	
	@Test
	public void testMoocBeanName(){
		System.out.println("testMoocBeanName:"+super.getBean("moocBeanName").hashCode());
}
}
package com.imooc.aware;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;

public class MoocBeanName implements BeanNameAware, ApplicationContextAware {
	
	private String beanName;

	@Override
	public void setBeanName(String name) {
		this.beanName=name;
		System.out.println("MoocBeanName:"+name);
		
	}

	@Override
	public void setApplicationContext(ApplicationContext applicationContext) 
			throws BeansException {
		System.out.println("setApplicationContext:"+applicationContext.getBean(this.beanName).hashCode());
		
	}

}

在第一个接口里面得到beanName,并把值赋值给成员变量(private String beanName;this.beanName=name;);在另一个bean里通过容器的getBean方法得到从setBeanName传入的这个bean实例

运行结果:

两个hashCode一样,说明无论是通过aware接口传入,还是通过启动的这种getbean传入,效果是一样的,从容器中得到相同的bean实例。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值