课程链接:

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

Spring课程 Spring入门篇 4-1 Spring bean装配(下)之bean定义及作用域注解实现的更多相关文章

  1. Spring Boot -01- 快速入门篇(图文教程)

    Spring Boot -01- 快速入门篇(图文教程) 今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到[慕课网]手机 app ...

  2. Spring实践系列-入门篇(一)

    本文主要介绍了在本地搭建并运行一个Spring应用,演示了Spring依赖注入的特性 1 环境搭建 1.1 Maven依赖 目前只用到依赖注入的功能,故以下三个包已满足使用. <properti ...

  3. Spring Cloud Alibaba入门篇

    学习条件 了解web三层架构 熟练应用SSM架构 了解Maven管理工具的使用 熟练使用SpringBoot,以及了解SpringBoot基本原理. 了解部分术语:应用.工具.耦合.负载等 温馨提示: ...

  4. Spring Data JPA 入门篇

    Spring Data JPA是什么 它是Spring基于ORM框架(如hibernate,Mybatis等).JPA规范(Java Persistence API)封装的一套 JPA应用框架,可使开 ...

  5. spring boot 学习入门篇【spring boot项目的搭建以及如何加载jsp界面】

    [ 前言]  Spring Boot 简介:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置, ...

  6. spring boot(一):入门篇

    构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...

  7. Spring Boot(一):入门篇+前端访问后端

    转自:Spring Boot(一):入门篇 什么是Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发 ...

  8. (转)Spring boot(一):入门篇

    https://www.cnblogs.com/ityouknow/p/5662753.html#!comments 构建微服务:Spring boot 入门篇 什么是Spring Boot Spri ...

  9. Spring Boot(一):入门篇

    Spring Boot(一):入门篇 一.Spring Boot介绍 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程. 该框架 ...

随机推荐

  1. Scrapy 中 Request 对象和 Response 对象的各参数及属性介绍

    Request 对象 Request构造器方法的参数列表: Request(url [, callback=None, method='GET', headers=None, body=None,co ...

  2. [CQOI2012][bzoj2668] 交换棋子 [费用流]

    题面 传送门 思路 抖机灵 一开始看到这题我以为是棋盘模型-_-|| 然而现实是骨感的 后来我尝试使用插头dp来交换,然后又惨死 最后我不得不把目光转向那个总能化腐朽为神奇的算法:网络流 思维 我们要 ...

  3. P3628 [APIO2010]特别行动队

    \(\color{#0066ff}{ 题目描述 }\) 你有一支由 \(n\) 名预备役士兵组成的部队,士兵从 \(1\) 到 \(n\) 编号,要将他们拆分 成若干特别行动队调入战场.出于默契的考虑 ...

  4. 树状数组【bzoj1103】: [POI2007]大都市meg

    1103: [POI2007]大都市meg 在经济全球化浪潮的影响下,习惯于漫步在清晨的乡间小路的邮递员Blue Mary也开始骑着摩托车传递邮件了. 不过,她经常回忆起以前在乡间漫步的情景.昔日,乡 ...

  5. 暴力【bzoj2208】: [Jsoi2010]连通数

    2208: [Jsoi2010]连通数 暴力过的. 没脸说... 正解好像是缩点+递推. 应该也不难写. code: #include <iostream> #include <cs ...

  6. C++在WINdow桌面绘制文字图形

    [起因] 最近碰到一个项目,需要在电脑左面显示一些信息,因此在网上找了一些资料,成功实现在桌面绘制信息. [代码] #include "stdafx.h" #include < ...

  7. zabbix监控java内存的脚本

    #!/bin/bash # 截取java的pid号 java_pid=`netstat -lnpt |grep |awk -F '/' '{print $1'}` # 截取$jstat命令的位置 js ...

  8. springboot整合dubbo注解方式

    工程结构: 主pom <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  9. [Groovy]static typing

    一般想到Groovy是JVM上的动态语言,都不知道它还有Static Typeing的功能 import groovy.transform.TypeChecked void someMethod() ...

  10. C语言中typedef的解释_2

    typedef工具是一个高级数据特性.利用typedef可以为某一类型自定义一个新的名称.这样可以提高程序的可读性,可移植性,向用户表明特定用途. typedef没有创建任何新的类型,它只是为某个已存 ...