zoukankan      html  css  js  c++  java
  • Spring课程 Spring入门篇 3-3 Spring bean装配(上)之aware接口

    课程链接:

    本节主要介绍了以下内容:

    1    aware介绍

    2    代码演练

    3    课程总结

    1    aware介绍

    1.1  为什么要使用aware?

    在java类中,可以方便的获取xml配置文件中的bean的各个属性。通过不同的aware可以获取不同的bean的属性

    1.2  有哪些类型的aware?

    常见的有:

    applicationContextAware(获取bean)

    beanNameAware(获取beanname)

    还有

    beanFactoryAware等等

    2    代码演练

    2.1  applicationContextAware(验证aware获取的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{
    
        @Override
        public void setApplicationContext(ApplicationContext arg0)
                throws BeansException {
            System.out.println("MoocApplicationContext========》"+arg0.getBean("moocApplicationContext").hashCode());
        }
    
    }

    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" 
    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.test.base.UnitTestBase;
    
    @RunWith(BlockJUnit4ClassRunner.class)
    public class TestAware extends UnitTestBase{
    
        public TestAware() {
            super("classpath:spring-aware.xml");
        }
        
        
        //测试ApplicationContext aware
        @Test
        public void testMoocApplicationContext(){
            System.out.println("testApplicationContext======》"+super.getbean("moocApplicationContext").hashCode());
        }
        
        //测试BeanNameAware
        /*@Test
        public void testMoocBeanName(){
            
        }*/
    }

    打印结果:

    二月 27, 2019 6:37:13 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
    信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5abce07: startup date [Wed Feb 27 18:37:13 CST 2019]; root of context hierarchy
    二月 27, 2019 6:37:13 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    信息: Loading XML bean definitions from class path resource [spring-aware.xml]
    MoocApplicationContext========》282483842
    testApplicationContext======》282483842
    二月 27, 2019 6:37:13 下午 org.springframework.context.support.ClassPathXmlApplicationContext doClose
    信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@5abce07: startup date [Wed Feb 27 18:37:13 CST 2019]; root of context hierarchy

    2.2  beanNameAware(获取xml配置中的beanname)

    实体类:

    package com.imooc.aware;
    
    import org.springframework.beans.factory.BeanNameAware;
    
    public class MoocBeanName implements BeanNameAware{
    
        @Override
        public void setBeanName(String arg0) {
            // TODO Auto-generated method stub
            System.out.println("beanName为"+arg0);
        }
    
    }

    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" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    <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.test.base.UnitTestBase;
    
    @RunWith(BlockJUnit4ClassRunner.class)
    public class TestAware extends UnitTestBase{
    
        public TestAware() {
            super("classpath:spring-aware.xml");
        }
        
        
      //测试BeanNameAware
        @Test
        public void testMoocBeanName(){
            
        }
    }

    打印结果

    二月 27, 2019 7:17:55 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
    信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@2e9a6f43: startup date [Wed Feb 27 07:17:55 CST 2019]; root of context hierarchy
    二月 27, 2019 7:17:55 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    信息: Loading XML bean definitions from class path resource [spring-aware.xml]
    beanName==moocBeanName
    二月 27, 2019 7:17:56 上午 org.springframework.context.support.ClassPathXmlApplicationContext doClose
    信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@2e9a6f43: startup date [Wed Feb 27 07:17:55 CST 2019]; root of context hierarchy

    3    课程总结

     aware获取的bean和服务器调用的bean的内存地址完全一致。

  • 相关阅读:
    git常用命令
    vue+el-menu+vue-router实现动态导航条
    css实现文字内容超出显示省略号
    背景图片居中全屏自适应显示
    linux相关操作(虚拟环境、查看进程)(不定时更新)
    关于定义序列化器时,read_only和write_only有什么作用
    flask之请求与响应、闪现(阅后即焚)、请求扩展(before,after)、中间件、LOCAL对象、偏函数、
    flask之web网关、三件套、配置、路由(参数、转化器及自定义转化器)、cbv、模板语言、session
    flask中的endpoint、自定义转化器、与djnago中session区别、利用装饰器实现登录认证
    jinja2模板用法
  • 原文地址:https://www.cnblogs.com/1446358788-qq/p/10441266.html
Copyright © 2011-2022 走看看