课程链接:

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")

 

posted on 2019-03-06 07:20  菜鸟乙  阅读(252)  评论(0编辑  收藏  举报