zoukankan      html  css  js  c++  java
  • Spring课程 Spring入门篇 4-1 Spring bean装配(下)之bean定义及作用域注解实现

    课程链接:

    1    概述

    2    代码演练

    3    代码解析

    1    概述

    1.1  bean注解相关

    a  context:component-scan标签使用

    问:该标签的作用是什么?

    答:该标签作用是支持注解,在xml配置文件中不用配置bean了

    问:该标签的使用条件是什么?

    答:spring3.0之后才支持该标签的使用

    b  类注解相关

    @Component   通用类注解(所有实体类都可以用该注解)

    @Repository     注解dao类(持久层)

    @Service     注解Service类(服务层)

    @Controller    注解Controller类(控制层)

    1.2  bean的作用域注解实现

    问:该标签的使用条件是什么?

    答:spring2.5 之后才支持该标签的使用

    2    代码演练

    2.1 注解实现(因为没有用xml bean的注入,并且没有自定义bean名称实体类component 注解后没有变量,测试类默认小驼峰)   

    实体类

    package com.imooc.beanannotation;
    
    import org.springframework.stereotype.Component;
    
    //因为不知道是什么类(dao类或者service类),所以用组件 通用的注解 @Component
    @Component
    public class BeanAnnotation {
        
        public void say(String word){
            System.out.println("爱生活,爱老婆---"+word);
        }
    
    }

    配置文件:(有了context:component-scan 标签之后不再使用context:annotation-config。前者是扫描基于类的注解,后者是完成bean的注册后,处理类内的方法和成员变量的注解。前者包括后者)

    <?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:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">
    
    <context:component-scan base-package="com.imooc.beanannotation"></context:component-scan>
    
    </beans>

    测试类(获取bean的样式为小驼峰,因为实体类没有配置组件后的变量

    package com.imooc.beanannotation;
    
    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 TestBeanAnnotation extends UnitTestBase{
        
        public TestBeanAnnotation() {
            super("classpath*:spring-beanannotation.xml");
            // TODO Auto-generated constructor stub
        }
        
        
        /**
         * 注意:此处getBean 为 类的小驼峰形式
         */
        @Test
        public void testbeanAnnotation(){
            try {
                BeanAnnotation bAnnotation = super.getbean("beanAnnotation");
                bAnnotation.say("褒姒");
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
        
        
        
    
    }

    打印结果:

    三月 06, 2019 7:14:13 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
    信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@409c8a10: startup date [Wed Mar 06 07:14:13 CST 2019]; root of context hierarchy
    三月 06, 2019 7:14:13 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    信息: Loading XML bean definitions from URL [file:/F:/xiangmu3/Xin/FuQiang/Spring/ddwei-dao/target/classes/spring-beanannotation.xml]
    爱生活,爱老婆---褒姒
    三月 06, 2019 7:14:13 上午 org.springframework.context.support.ClassPathXmlApplicationContext doClose
    信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@409c8a10: startup date [Wed Mar 06 07:14:13 CST 2019]; root of context hierarchy
    

    2.2 注解实现( 自定义bean名称实体类component 注解后有变量,测试类测试时使用bean自定义名称)   

    实体类:

    package com.imooc.beanannotation;
    
    import org.springframework.stereotype.Component;
    
    //因为不知道是什么类(dao类或者service类),所以用组件 通用的注解 @Component
    @Component("beanName")
    public class BeanAnnotation {
        
        public void say(String word){
            System.out.println("爱生活,爱老婆---"+word);
        }
    
    }

    测试类:

    package com.imooc.beanannotation;
    
    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 TestBeanAnnotation extends UnitTestBase{
        
        public TestBeanAnnotation() {
            super("classpath*:spring-beanannotation.xml");
            // TODO Auto-generated constructor stub
        }
        
        /**
         * 注意:此处getBean 为 类的小驼峰形式
         */
        @Test
        public void testbeanAnnotation(){
            try {
                BeanAnnotation bAnnotation = super.getbean("beanName");
                bAnnotation.say("褒姒");
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
        
    }

    打印结果:(1.1打印结果相同)

    2.3  bean的作用域注解实现(prototype)

    实体类:

    package com.imooc.beanannotation;
    
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Component;
    
    //因为不知道是什么类(dao类或者service类),所以用组件 通用的注解 @Component
    @Scope("prototype")
    @Component("beanName")
    public class BeanAnnotation {
        
        public void say(String word){
            System.out.println("爱生活,爱老婆---"+word);
        }
        
        
        //打印出hashCode
        public void getHashCodeProtype(){
            System.out.println("hashCode码值为:---"+this.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"
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context.xsd">
    
    <context:component-scan base-package="com.imooc.beanannotation"></context:component-scan>
    
    </beans>

    测试类:

    package com.imooc.beanannotation;
    
    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 TestBeanAnnotation extends UnitTestBase{
        
        public TestBeanAnnotation() {
            super("classpath*:spring-beanannotation.xml");
            // TODO Auto-generated constructor stub
        }
        
        /**
         * 注意:此处getBean 为 类的小驼峰形式
         */
        @Test
        public void testbeanAnnotation(){
            try {
                BeanAnnotation bAnnotation = super.getbean("beanName");
                bAnnotation.say("褒姒");
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
        
        
        @Test
        public void testbeanAnnotationGetScope(){
            try {
                BeanAnnotation bAnnotation = super.getbean("beanName");
                bAnnotation.getHashCodeProtype();
                
                bAnnotation = super.getbean("beanName");
                bAnnotation.getHashCodeProtype();
            } catch (Exception e) {
                // TODO: handle exception
            }
        }
        
    }

    打印结果:

    三月 08, 2019 6:16:46 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
    信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@3f64fffc: startup date [Fri Mar 08 06:16:46 CST 2019]; root of context hierarchy
    三月 08, 2019 6:16:46 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    信息: Loading XML bean definitions from URL [file:/F:/xiangmu3/Xin/FuQiang/Spring/ddwei-dao/target/classes/spring-beanannotation.xml]
    hashCode码值为:---2137315958
    三月 08, 2019 6:16:47 上午 org.springframework.context.support.ClassPathXmlApplicationContext doClose
    信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@3f64fffc: startup date [Fri Mar 08 06:16:46 CST 2019]; root of context hierarchy
    hashCode码值为:---910342737

    2.4  bean的作用域注解实现(singleton)

    实体类:

    package com.imooc.beanannotation;
    
    import org.springframework.context.annotation.Scope;
    import org.springframework.stereotype.Component;
    
    //因为不知道是什么类(dao类或者service类),所以用组件 通用的注解 @Component
    //@Scope("prototype")
    @Scope("singleton")
    @Component("beanName")
    public class BeanAnnotation {
        
        public void say(String word){
            System.out.println("爱生活,爱老婆---"+word);
        }
        
        
        //打印出hashCode
        public void getHashCodeProtype(){
            System.out.println("hashCode码值为:---"+this.hashCode());
        }
    
    }

    xml配置文件(同2.3)

    测试类:(同2.3)

    打印结果:

    三月 08, 2019 6:19:15 上午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
    信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@3f64fffc: startup date [Fri Mar 08 06:19:15 CST 2019]; root of context hierarchy
    三月 08, 2019 6:19:15 上午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    信息: Loading XML bean definitions from URL [file:/F:/xiangmu3/Xin/FuQiang/Spring/ddwei-dao/target/classes/spring-beanannotation.xml]
    hashCode码值为:---1939979416
    hashCode码值为:---1939979416
    三月 08, 2019 6:19:15 上午 org.springframework.context.support.ClassPathXmlApplicationContext doClose
    信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@3f64fffc: startup date [Fri Mar 08 06:19:15 CST 2019]; root of context hierarchy

    3    代码解析

    3.1  2.1的例子,注解注入默认

    a  实体类:    使用@Component组件

    b  xml配置文件:   <context:component-scan base-package="com.imooc.beanannotation"></context:component-scan>

                (引入xml相关声明,详细见2.1例子 spring3.0已上才支持)

    c  测试类:    实体类@Component后边没有定义bean时,如何获取bean

    3.2  2.2的例子,注解注入定义bean

    a  实体类:    使用@Component("beanName")组件

    b  xml配置文件:   <context:component-scan base-package="com.imooc.beanannotation"></context:component-scan>

                 (引入xml相关声明,详细见2.1例子 spring3.0已上才支持)

    c  测试类:    BeanAnnotation bAnnotation = super.getbean("beanName"); (注解@Component定义bean时,如何获取bean

     

    3.3  2.3的例子,作用域多例的使用

    a  实体类:    @Scope("prototype")

    3.4  2.4的例子,作用域单例的使用

    a  实体类:    @Scope("singleton")

  • 相关阅读:
    HTTP协议
    网络编程笔记
    基于udp协议实现QQ:可以并发一对多
    基于udp协议通信:实现了并发
    基于tcp协议通信,运用socketserver模块实现并发
    @PathVariable 与@RequestParam
    IDEA 中的一些概念变化
    Bubble Cup 11
    ACM超时问题
    D
  • 原文地址:https://www.cnblogs.com/1446358788-qq/p/10481045.html
Copyright © 2011-2022 走看看