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")
Spring课程 Spring入门篇 4-1 Spring bean装配(下)之bean定义及作用域注解实现的更多相关文章
- Spring Boot -01- 快速入门篇(图文教程)
Spring Boot -01- 快速入门篇(图文教程) 今天开始不断整理 Spring Boot 2.0 版本学习笔记,大家可以在博客看到我的笔记,然后大家想看视频课程也可以到[慕课网]手机 app ...
- Spring实践系列-入门篇(一)
本文主要介绍了在本地搭建并运行一个Spring应用,演示了Spring依赖注入的特性 1 环境搭建 1.1 Maven依赖 目前只用到依赖注入的功能,故以下三个包已满足使用. <properti ...
- Spring Cloud Alibaba入门篇
学习条件 了解web三层架构 熟练应用SSM架构 了解Maven管理工具的使用 熟练使用SpringBoot,以及了解SpringBoot基本原理. 了解部分术语:应用.工具.耦合.负载等 温馨提示: ...
- Spring Data JPA 入门篇
Spring Data JPA是什么 它是Spring基于ORM框架(如hibernate,Mybatis等).JPA规范(Java Persistence API)封装的一套 JPA应用框架,可使开 ...
- spring boot 学习入门篇【spring boot项目的搭建以及如何加载jsp界面】
[ 前言] Spring Boot 简介:Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置, ...
- spring boot(一):入门篇
构建微服务:Spring boot 入门篇 什么是spring boot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框 ...
- Spring Boot(一):入门篇+前端访问后端
转自:Spring Boot(一):入门篇 什么是Spring Boot Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发 ...
- (转)Spring boot(一):入门篇
https://www.cnblogs.com/ityouknow/p/5662753.html#!comments 构建微服务:Spring boot 入门篇 什么是Spring Boot Spri ...
- Spring Boot(一):入门篇
Spring Boot(一):入门篇 一.Spring Boot介绍 Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程. 该框架 ...
随机推荐
- java基础之流程控制语句
一. 分支 1. 三元运算符 ?: 注意:三元运算符虽然简洁但是语法乱,而且必须要有接受者或者直接打印 1. if else语句 另一种不带括号的写法: if(条件) 语句1 ...
- kuangbin专题K(next数组)
题目链接: https://vjudge.net/contest/70325#problem/K 题意: 给出一个字符串 str, 求 str 的所有前缀总共出现的次数. 思路: 先求一次 next ...
- 阅读GFS的一点总结
这是我第一次阅读学术论文,文章中充斥的一些学术名词给我的阅读带来了一些困难,因为此前没有接触过这方面的内容,在同学的帮助下,查阅了一些资料,终于对GFS有了一点认识,写出这一些感悟,文章措辞不严谨之处 ...
- 模板 ST表
ST表 询问静态最值. code: #include <iostream> #include <cstdio> using namespace std; inline int ...
- 读经典——《CLR via C#》(Jeffrey Richter著) 笔记_引用类型和值类型(二)
[引用类型和值类型的区别] //引用类型(由于使用了‘class’) class SomeRef { public Int32 x; } //值类型(由于使用了‘struct’) struct Som ...
- CodeForces - 476B -Dreamoon and WiFi(DFS+概率思维)
Dreamoon is standing at the position 0 on a number line. Drazil is sending a list of commands throug ...
- Paw —— 比Postman更舒服的API利器
特点: 颜值高本地应用,流畅有收藏夹,管理请求可使用环境变量.比如用来一键切换开发环境请求和线上环境请求.即不同环境的同个接口只有host不一样,其它都是一样的,所以就把host抽离出来弄成一个环境变 ...
- 斑马打印机客户端GET和POST,以及后端两种打印方式。
斑马打印机客户端GET和POST,以及后端两种打印方式. 背景环境:打印机安装在客户端外网.当用户登录时,通过ajax取服务器数据,返回打印机命令,然后客户端通过JS发送给斑马打印机. 1.使用Get ...
- sqoop数据校验
sqoop数据校验 # check data oracle_cnt=$(sqoop eval \ -Dmapred.job.queue.name=${queue} \ --connect ${conn ...
- java不可见字符 trim
trim()的作用去掉前后的空格, 但是解析excel,出现一个字符串trim之后还是有”空格“ 做了一下实验,原来一些不可见的字符不一定是“空格”, trim()也去不掉, 只能自己写方法了