文档章节

Spring再回首一:IOC与DI

silence88
 silence88
发布于 2017/02/16 14:51
字数 1253
阅读 5
收藏 1
点赞 0
评论 0

1、spring管理bean的两种方式:xml和注解

2、bean实例化的3中方式:

  • 基于无参构造函数(常用)

注意类里面如果已经提供了一个有参数的的构造函数,一定还要给一个无参的构造函数。

  <bean class="cn.zxy.Person" id="person"></bean>
  • 静态工厂
<bean id="person" class="cn.zxy.factory.PersonStaticFactory" factory-method="createPerson">

这里的class是值得工程类所在的位置,后面的method指定的是通过那个静态方法获取到person的实例

  • 实例工厂(返回类的对象的方法不是静态的方法)
<!-- 实例工程方法需要先创建工厂实例,然后在创建所需对象的时候,将其赋值为factory-bean -->
<bean id="personFactory" class="cn.zxy.factory.PersonFactory"></bean>
<bean id="person2" factory-bean="personFactory" factory-method="createInstance"></bean>

3、bean的作用范围scope

singleton:单例的,不指定的时候默认就是这个。

prototype:原型,多例的。

request:spring创建一个bean对象,将对象存放在request域中

session:spring创建一个bean对象,将对象存放在session域中

globleSession:xxxx

4、spring属性的2种注入方式:

  • set方式注入(常用)
<bean class="cn.zxy.Person" id="person">
   <property name="name" value="zxy"></property>
   <property name="id" value="125"></property>
</bean>

注意类中对每一个要注入的域提供set方法,如果属性是另外一个对象,则value应该改为ref。ref给对应的beanid。

上述的注入方式可以换种方式写(p名称空间注入)。

<bean class="cn.zxy.Person" id="person" p:name="zxy" p:id="125"></bean>

命名空间p 的schema URI 为http://www.springframework.org/schema/p。如果你想使用命名空间p,只需要在Spring 的XML 配置中增加段声明

  • 有参构造注入(注意提供有参数构造方法):
 <bean class="cn.zxy.Person" id="person">
     <constructor-arg name="id" value="125"></constructor-arg>
     <constructor-arg name="name" value="zxy"></constructor-arg>
 </bean>

5、set方式注入复杂数据类型

数组、list、map、properties

6、IOC和DI

IOC:控制反转,将bean的管理交给spring。

DI:依赖注入,向类里面的属性设置值

两者之间的关系:依赖注入不能单独存在,依赖于IOC

7、spring管理bean注解方式

注解相关的类放在aop的jar里面了

开启注解扫描配置两种方式以及区别:

1、

<!-- 开启注解扫描,到包里面扫描类、方法、属性上面是否有-->
<context:component-scan base-package="com.bdqn.entity"></context:component-scan>

2、

<!--只扫描属性上的注解-->
<context:annotation-config></context:annotation-config>

创建对象的四种注解形式

  • Controller: 用于控制器的注解
  • Service : 用于service的注解
  • Component: 用于基本组件的注解
  • Repository:用于Dao层的注解

其实,对于spring来说,它根本无法识别controller,service等,它只知道只要你加了以上四个注解,它就帮你创建bean,简单来说,就是如果你在控制器上使用Component注解,或者使用Repository注解也是可以的,四种注解可以混用,但是,我们一般都按照上方所示的规则来使用注解,这样代码才有可读性

默认命名规则

  • 我们使用注解配置bean的时候,并没有指定bean的id,那么spring帮我们创建bean的时候会给一个默认的id,id为类名首字母小写。如TestController-> testController
  • 我们也可以指定bean的名称(id),使用注解的value属性,如@Service(value=”myService”)
  • value属性是注解的默认属性,可以省略,即@Service(“myService”)

注解注入属性(两种方式)

@Autowired:注解自动装配,无需指定是哪个bean的名称不常用

@Resource:常用,注解要求提供一个Bean名称的属性,若该属性为空,则自动采用标注处的变量或方法名作为Bean的名称.

@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了。@Resource有两个属性是比较重要的,分是name和type,Spring将@Resource注解的name属性解析为bean的名字,而type属性则解析为bean的类型。所以如果使用name属性,则使用byName的自动注入策略,而使用type属性时则使用byType自动注入策略。如果既不指定name也不指定type属性,这时将通过反射机制使用byName自动注入策略。
  @Resource装配顺序
  1. 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常
  2. 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常
  3. 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常
  4. 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配;如果没有匹配,则回退为一个原始类型进行匹配,如果匹配则自动装配; 

© 著作权归作者所有

共有 人打赏支持
silence88
粉丝 7
博文 56
码字总数 72855
作品 0
深圳
程序员
Spring IoC & DI

IOC诞生的历史 在没有IoC时,关联不同模块是通过类实例实现的,代码可能是这样子的: 当YourServiceImpl的接口不变时,只需要根据业务需要更换不同的YourService实现类即可。一旦更换实现类时...

classfly ⋅ 06/18 ⋅ 0

SpringBoot的幕后推手...

一、背景   这两年随着微服务的盛行,SpringBoot框架水到渠成的得到了高曝光,作为程序猿的我们,现在要是不知道一点SpringBoot相关的东西,貌似出去找工作都会被深深地鄙视,不过在我们开...

Java工程师-Distance ⋅ 06/01 ⋅ 0

Spring Dependency

我们知道Spring的最重要的核心是Ioc,有时候也被称为DI(Dependency Injection,依赖注入),那么关于Dependency,你了解多少呢? 之前我们有提到IOC和DI的关系与概念,我是把它们区分开了,所...

Real_man ⋅ 05/20 ⋅ 0

推荐几个自己写的Java后端相关的范例项目(转载)

http://wosyingjun.iteye.com/blog/2312553 这里推荐几个自己写的范例项目,主要采用SSM(Spring+SpringMVC+Mybatis)框架,分布式架构采用的是(dubbo+zookeeper)。范例项目的好处是简单易...

指尖的舞者 ⋅ 2016/09/27 ⋅ 0

Spring IOC知识点一网打尽!

前言 只有光头才能变强 回顾前面: 给女朋友讲解什么是代理模式 包装模式就是这么简单啦 单例模式你会几种写法? 工厂模式理解了没有? 在刷Spring书籍的时候花了点时间去学习了单例模式和工...

Java3y ⋅ 05/22 ⋅ 0

Spring IoC(更新中)

概念 IoC(控制反转,也叫依赖注入DI)是Spring的核心,几乎Spring的所有组件都要建立在此基础之上,包括AOP,声明式事务,SpringMVC等等。那么IoC的主要目的是什么呢?两个字“解耦”。为什么...

互联网小龙虾 ⋅ 2014/03/04 ⋅ 0

Spring MVC 到 Spring BOOT的简化之路

背景 从Servlet技术到Spring和Spring MVC,开发Web应用变得越来越简捷。但是Spring和Spring MVC的众多配置有时却让人望而却步,相信有过Spring MVC开发经验的朋友能深刻体会到这一痛苦。因为...

临江仙卜算子 ⋅ 05/09 ⋅ 0

轻量级的Java应用编程框架--ZolltyMVC

ZolltyMVC框架是一款轻量级的Java应用编程框架,融合了常用的IOC/DI、MVC(注解、XML配置、RESTful API、模型驱动、视图模板等)功能。目的就是帮助大家开发高效、灵活、高质量的应用,并减轻...

Zollty ⋅ 2015/09/16 ⋅ 0

Spring入门到精通 依赖注入

一、Spring依赖注入Ioc概述 在这里引入iteye的大牛开涛的博客,对spring框架的ioc的理解,写的非常通俗易懂。 1、Ioc是什么 Ioc-Inversion of Control,即"控制反转",不是什么技术,而是一种...

Winnie007 ⋅ 2015/10/08 ⋅ 0

Dependency Injection-依赖注入详解

点击关注 异步图书,置顶公众号 每天与你分享 IT好书 技术干货 职场知识 参与文末话题讨论,每日赠送异步图书。 ——异步小编 依赖注入是目前很多优秀框架都在使用的一个设计模式。Java的开发...

异步社区 ⋅ 04/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周六乱弹 —— 假如你被熊困到树上

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《如果写不出好的和弦就该在洒满阳光的钢琴前一起吃布丁》 《如果写不出好的和弦就该在洒满阳光的钢琴前一起吃布丁》- 谢...

小小编辑 ⋅ 41分钟前 ⋅ 4

vbs 取文件大小 字节

dim namedim fs, s'name = Inputbox("姓名")'msgbox(name)set fs = wscript.createobject("scripting.filesystemobject") 'fs为FSO实例if (fs.folderexists("c:\temp"))......

vga ⋅ 今天 ⋅ 1

高并发之Nginx的限流

首先Nginx的版本号有要求,最低为1.11.5 如果低于这个版本,在Nginx的配置中 upstream web_app { server 到达Ip1:端口 max_conns=10; server 到达Ip2:端口 max_conns=10; } server { listen ...

算法之名 ⋅ 今天 ⋅ 0

Spring | IOC AOP 注解 简单使用

写在前面的话 很久没更新笔记了,有人会抱怨:小冯啊,你是不是在偷懒啊,没有学习了。老哥,真的冤枉:我觉得我自己很菜,还在努力学习呢,正在学习Vue.js做管理系统呢。即便这样,我还是不...

Wenyi_Feng ⋅ 今天 ⋅ 0

博客迁移到 https://www.jianshu.com/u/aa501451a235

博客迁移到 https://www.jianshu.com/u/aa501451a235 本博客不再更新

为为02 ⋅ 今天 ⋅ 0

win10怎么彻底关闭自动更新

win10自带的更新每天都很多,每一次下载都要占用大量网络,而且安装要等得时间也蛮久的。 工具/原料 Win10 方法/步骤 单击左下角开始菜单点击设置图标进入设置界面 在设置窗口中输入“服务”...

阿K1225 ⋅ 今天 ⋅ 0

Elasticsearch 6.3.0 SQL功能使用案例分享

The best elasticsearch highlevel java rest api-----bboss Elasticsearch 6.3.0 官方新推出的SQL检索插件非常不错,本文一个实际案例来介绍其使用方法。 1.代码中的sql检索 @Testpu...

bboss ⋅ 今天 ⋅ 0

informix数据库在linux中的安装以及用java/c/c++访问

一、安装前准备 安装JDK(略) 到IBM官网上下载informix软件:iif.12.10.FC9DE.linux-x86_64.tar放在某个大家都可以访问的目录比如:/mypkg,并解压到该目录下。 我也放到了百度云和天翼云上...

wangxuwei ⋅ 今天 ⋅ 0

PHP语言系统ZBLOG或许无法重现月光博客的闪耀历史[图]

最近在写博客,希望通过自己努力打造一个优秀的教育类主题博客,名动江湖,但是问题来了,现在写博客还有前途吗?面对强大的自媒体站点围剿,还有信心和可能型吗? 至于程序部分,我选择了P...

原创小博客 ⋅ 今天 ⋅ 0

IntelliJ IDEA 2018.1新特性

工欲善其事必先利其器,如果有一款IDE可以让你更高效地专注于开发以及源码阅读,为什么不试一试? 本文转载自:netty技术内幕 3月27日,jetbrains正式发布期待已久的IntelliJ IDEA 2018.1,再...

Romane ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部