Spring Bean装配(下)——注解


@Repository,@Service,@Controller这三个注解是基于component定义的注解




component-scan:组件扫描
base-package:扫描这个下的所有类
<context:component-scan>和<context:annotation-config>的区别:
前者可以扫描基于类的注解,但是后者只能在完成bean的注册之后去处理bean中的方法或者是成员变量的注解,在使用前者的时候已经包含了后者的全部功能,通常在开发的过程使用的是前者

或者使用@Component的自定义注解:我们可以自定义注解,用@Component去注解我们的自定义注解,那么我们的自定义注解也可以被用于注解类,这样也能被Spring容器自动发现
type类型有以下几种:


1.service会有一个属性name,用service去注解这个类SimpleMovieLister的时候,可以去显示的指定这个类在注册到bean容器中或者叫IOC容器中,它所对应的id也就是它的名称相当于xml配置文件中的id,如果我们显示指定了,如果我们显示指定了,那么就会用我们显示指定的名称。
2.没有显示指定它的id或名称是什么,它就会根据BeanNameGenerator来自动生成它的id,通常的生成规则是以类名为基础,并把类名的第一个字母小写作为字符串的id
3.自定义bean命名策略
怎么使用自定义bean命名策略的实现类?
name-generator去指定我们自己的命名策略实现
Spring Bean装配之Bean的定义及作用域的注解实现

如何使用自定义的scope策略?
scope-resolver去指定我们自己的实现类,基于这种方式的去扫描的所有类,它的scope都是由我们自定义的scope策略去实现的

用到什么样的标签可以去参考下spring的官方文档,里面会有相关的说明


@Required不常用的注解
@Autowired字面理解自动的去进行装配

Autowired相比于Required,它的用途范围更广,既可以用在set方法上,也可以用在成员变量或者构造器上,常用的注解


众所周知的解析依赖性接口:Spring自己的解析依赖性接口,主要是解析Spring的xml文件或者是解析注解等等。
我们可以在当前类里面去声明对ApplicationContext的引用,然后使用@Autowired注解,这个时候我们就可以在当前类中得到IOC的上下文信息,然后使用这个上下文信息

数组:是set或者list
所有特定类型的bean:当set中设置MovieCatalog这种类型的时候,当前的ApplicationContext中,所有是set泛型中声明类型的这种bean或者是它的子类,都可以被Autowired注解,然后把这些bean的实例放到当前的集合movieCatalogs当中去,当然也可以用于Map
key:所有的bean的id
value:bean的对象

例子



1.用在成员变量的时候
@Qualifier("main")
如果有多个MovieCatalog的时候,我们可以通过Qualifier来指定使用main,也就是bean id为main的这个MovieCatalog实现类或者是子类
2.用在方法参数中
用MovieCatalog对应的bean id为main的这个bean的实例



通过什么方式定义自己的qualifier注解?
1.定义自己的注解的时候用qualifier来注解我们自定义的注解,那么我们定义的注解就具备了qualifier注解的相应功能。
2.使用xml配置文件的方式

@Qualifier注解能够缩小范围,指定到具体的bean

@component注解可以用在任何注解类上面
两种方式的效果都是一样的,都会向SpringIoc容器中添加一个对象,左边的方式是使用编码加注解的方式,右边是使用基于xml的配置方式
@Bean(name="myFoo")
自己指定bean的name
如果使用@Bean注解,在没有指定name的情况下,那么这个bean的name是方法的名称
如何使用@ImportResource和@Value注解进行资源文件读取
使用配置文件的方式

使用注解的方式

从资源文件中去加载资源文件的配置并应用到bean的创建中
如何创建DriverManagerDataSource的bean对象?
用@value这个注解从资源文件中取出它的key,赋值给当前类的成员变量
再使用@Bean这个注解去创建DriverManagerDataSource,同时把url,username,password传入DriverManagerDataSource构造器

例子

这里所得到的hashCode对应这个bean即stringStore所在类的hashCode

这里所得到的hashCode是对象的hashCode




如果没有指定Resource的name,那么默认就是根据setter方法去得出,如果@Resource注解是在成员变量上,那就是根据成员变量的名称得出

这里ApplicationContext可以理解为IOC容器



当同一种类型的bean在IOC容器中有多个的时候,想使用特定的那个bean,这个时候就可以使用@named注解
@named的两种使用方式
1.@named与@Component是等效的,也可以用来注解在类上,如以上代码所示
2.@named用来指定某一个名称的bean,如以下代码所示

Spring Bean装配(下)——注解的更多相关文章
- Spring入门篇——第4章 Spring Bean装配(下)
第4章 Spring Bean装配(下) 介绍Bean的注解实现,Autowired注解说明,基于java的容器注解说明,以及Spring对JSR支持的说明 4-1 Spring Bean装配之Bea ...
- Spring Bean装配详解(五)
装配 Bean 的概述 前面已经介绍了 Spring IoC 的理念和设计,这一篇文章将介绍的是如何将自己开发的 Bean 装配到 Spring IoC 容器中. 大部分场景下,我们都会使用 Appl ...
- Spring Bean装配笔记
Spring Bean装配笔记 Spring中的Bean是一个很重要的概念.Spring作为一个Bean容器,它可以管理对象和对象之间的依赖关系,我们不需要自己建立对象,把这部分工作全部转交给容器完成 ...
- Spring Bean装配(上)
Bean:在spring的IOC里面,把配置到IOC容器里面的实体或者是对象都称为Bean Bean配置项 Bean的作用域 Bean的生命周期 Bean的自动装配 Resources&Res ...
- Spring入门篇——第3章 Spring Bean装配(上)
第3章 Spring Bean装配(上) 介绍Bean的作用域.生命周期.Aware接口.自动装配和Resource等内容. 3-1 Spring Bean装配之Bean的配置项及作用域 从上至下依次 ...
- 002-Spring4 快速入门-项目搭建、基于注解的开发bean,Bean创建和装配、基于注解的开发bean,Bean初始化销毁、Bean装配,注解、Bean依赖注入
一.项目搭建 1.项目创建 eclipse→project explorer→new→Project→Maven Project 默认配置即可创建项目 2.spring配置 <dependenc ...
- Spring课程 Spring入门篇 4-3 Spring bean装配(下)之Autowired注解说明2 集合运用
课程链接: 本节主要讲了以下几块内容 1 注解相关解析 2 代码演练 集合for循环的使用 2.1 list集合应用 2.2 map集合应用 2.3 集合排序(只对list有效,对map无效(list ...
- Spring课程 Spring入门篇 4-1 Spring bean装配(下)之bean定义及作用域注解实现
课程链接: 1 概述 2 代码演练 3 代码解析 1 概述 1.1 bean注解相关 a context:component-scan标签使用 问:该标签的作用是什么? 答:该标签作用是支持注解,在x ...
- Spring课程 Spring入门篇 4-7 Spring bean装配之基于java的容器注解说明--@Scope 控制bean的单例和多例
1 解析 1.1 bean的单例和多例的应用场景 1.2 单例多例的验证方式 1.3 @Scope注解单例多例应用 2 代码演练 2.1 @Scope代码应用 1 解析 1.1 bean的单例和多例的 ...
随机推荐
- vue中添加less配置,用于计算div高度
需求:左边垂直的菜单栏高度设置为 100% - 导航栏的高度(3.6rem) 首先,从vue-cli脚手架里的安装的webpack模板中并没有less的依赖配置,得自己手动添加安装 安装命令::npm ...
- 使用Cython时遇到的cl.exe的问题
最近使用cython时,遇到一个问题,报错如下: cl.exe /c /nologo /Ox /W3 /GL /DNDEBUG /MD "-Id:\program files\python3 ...
- python 创建虚拟环境时报错OSError, setuptools下载失败
错误信息如下: Using base prefix 'c:\\users\\huful\\appdata\\local\\programs\\python\\python36-32'New pytho ...
- python map函数(23)
截至到目前为止,其实我们已经接触了不少的python内置函数,而map函数也是其中之一,map函数是根据指定函数对指定序列做映射,在开发中使用map函数也是有效提高程序运行效率的办法之一. 一.语法定 ...
- 无线网卡SP-WL450U的驱动问题
修改win10的设备驱动为需要的驱动,SP-WL450U的驱动问题 解决SP-WL450U的驱动问题,在电脑上安装无线网卡后,总是用不上5G信号,只能选择2.4G.重新安装程序后也不行,在反复试用后发 ...
- golang使用注意事项
1.可以给类型取别名,但是该类型和别名是两个不同的类型: type myInt int 2.go支持可变参数:args... 0个或多个参数:func sum(args... int) sum int ...
- spring cloud微服务实践五
本篇我们来看看怎么实现spring cloud的配置中心. 在分布式系统中,特别是微服务架构下,可能会存在许多的服务,每个服务都会存在一个或多个的配置文件.那怎么多的配置文件的管理就会成为一个大问题. ...
- MySQL 子查询(四)子查询的优化、将子查询重写为连接
MySQL 5.7 ref ——13.2.10.10优化子查询 十.子查询的优化 开发正在进行中,因此从长远来看,没有什么优化建议是可靠的.以下列表提供了一些您可能想要使用的有趣技巧.See also ...
- jvm垃圾回收器介绍
上篇文章中我们讨论了jvm的内存区域,这篇文章我们来讨论针对的内存区域的垃圾回收机制. 其实针对垃圾回收我们通常考虑三个问题:1.哪些内存需要回收?2.什么时候回收?3.如何回收?下面我们针对这三个问 ...
- C# 关于爬取网站数据遇到csrf-token的分析与解决
需求 某航空公司物流单信息查询,是一个post请求.通过后台模拟POST HTTP请求发现无法获取页面数据,通过查看航空公司网站后,发现网站使用避免CSRF攻击机制,直接发挥40X错误. 关于CSRF ...
