课程链接:

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. codevs1068(dp)

    题目链接: http://codevs.cn/problem/1068/ 题意: 中文题诶~ 思路: dp 用 dp[i][j][k][l] 表示取 i 个 1, j 个 2, k 个 3, l 个 ...

  2. Elaxia的路线

    Elaxia的路线 求无向图中,两对点间最短路的最长公共路径. 四遍spfa标出每条边的标记,然后用拓扑排序跑dp即可. exp:拓扑排序可以跑DAG上的dp. #include <cstdio ...

  3. loj #2021. 「AHOI / HNOI2017」大佬

    #2021. 「AHOI / HNOI2017」大佬   题目描述 人们总是难免会碰到大佬.他们趾高气昂地谈论凡人不能理解的算法和数据结构,走到任何一个地方,大佬的气场就能让周围的人吓得瑟瑟发抖,不敢 ...

  4. vue axios ajax引擎

    0.调用 1.axios api axios.request(config) axios.get(url[,config]) axios.delete(url[,config]) axios.head ...

  5. deque时间复杂度和vector,list比较

    deque supports const time insert and erase operations at the beginning or the end, insert or erase i ...

  6. CF708B Recover the String 构造

    For each string s consisting of characters '0' and '1' one can define four integers a00, a01, a10 an ...

  7. 【Ant】How to print all the system properties in Ant build file

    在Ant里可以使用echoproperties task来达到目的 <target name="run"> <echoproperties /> </ ...

  8. redis数据库介绍(NoSql数据库)

  9. C语言中变量的存储类型

    在C语言中,对变量的存储类型说明有以下四种: auto 自动变量register   寄存器变量extern 外部变量static   静态变量 自动变量和寄存器变量属于动态存储方式,外部变量和静态变 ...

  10. 74th LeetCode Weekly Contest Preimage Size of Factorial Zeroes Function

    Let f(x) be the number of zeroes at the end of x!. (Recall that x! = 1 * 2 * 3 * ... * x, and by con ...