spring(一) IOC讲解
spring基本就两个核心内容,IOC和AOP。把这两个学会了基本上就会用了。
--WH
一、什么是IOC?
IOC:控制反转,通俗点讲,将对象的创建权交给spring,我们需要new对象,则由spring帮我们创建,然后供我们使用。
编写IOC的helloworld。简单的三步就搞定了
1、导入jar包
5个包,4个核心包,1个依赖包
2、编写配置文件
spring帮我们创建对象,但也必须有相关类的信息,不然怎么能够创建呢?
配置文件名称:建议:ApplicationContext.xml,取别的也可以,但是取建议的名称的话,找到该配置文件更为简单,
配置文件位置:任意,一般都在classpath下(src)
文件约束内容:添加约束,spring-framework-3.2.0.RELEASE 为spring的核心 docs为帮助文档
约束位置:spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\xsd-config.html

3、从spring容器中获取对象

UserService.java

二、依赖注入(DI)
现在应该知道了什么是IOC,helloworld很简单吧,但spring如果只提供这么一个简单的功能,就不能被大家那么所崇拜了,上面只是把IOC这个功能给大家简单展示一下,让大家脑海中有IOC是干什么的,能做什么的概念,现在就对其进行加强把。
依赖注入(DI):spring创建对象A时,会将对象A所依赖的对象B也创建出来,并自动注入到对象A中。
依赖:(has a) 有一个的意思,比如类A中有一个类B,那么就说A依赖B。 继承,实现(is a)
而我们说的依赖注入,就是当创建A对象时,同时会将B对象给创建,并自动注入到对象A中去,也就说,我只叫spring给我A对象,但是A中可以使用B对象了。这个有很大的用处,但如何去实现依赖注入功能呢?


UserService中有使用userDao对象,这个我们都很熟悉的使用伎俩,service层调用dao层的方法。按照往常我们的写法,在service中需要自己new出UserDao对象,但是在spring中就不需要了,一切对象都让spring帮我们创建。
ApplicationContext.xml

过程就如图中所画,先创建UserService对象,然后在根据property中的ref找到userDaoId并创建UserDao对象,然后根据property中的name,通过setter方法注入,这样就完成了依赖注入。
测试:

三、spring创建实例对象的三种方法
因为并不是每个bean都是普通类,有些是通过工厂来获取的,而工厂就有静态工厂和实例工厂,所以spring创建实例对象有三种情况,
默认无参构造,就是编写IOC的helloworld的那种方式,直接<bean id="" class="">
静态工厂:由于是静态工厂,所以通过工厂类直接调用创建实例的方法就可以了。
<bean id="" class="工厂全限定类名" factory-method="静态方法">
实例工厂:需要先创建出工厂实例,然后在由工厂创建对象
<bean id="myFactoryId" class="工厂全限定类名"></bean>
<bean id="" factory-bean="myFactoryId" factory-method=""></bean>
四、属性依赖注入基于XML
之前讲的那个依赖注入其实也属于属性依赖注入这一范畴中,在最开始我们演示IOC(控制反转)也就是spring帮我们创建实例时,那只是通过无参构造方法进行创建,那么在实际开发中,这样创建肯定是不行的,所以我们需要在spring的配置文件中配置一些属性信息,使spring帮我们创建时,可以直接将对象的一些属性也注入进去,有两种方法
通过构造方法注入
不管是普通属性还是引用数据,都可以通过构造方法进行注入。
通过setter方法进行注入
通过setter方法对普通属性和引用属性进行注入,那么要是创建的对象中有集合呢?那该如何进入注入?
集合的注入List、Map、Set、数组、Properties等。
List
set

map

数组

propertyis

注意:properties这种类型存放形式跟map差不多,以key和value进行存放的,

到这里,基本上就把所有能够注入的属性类型都讲解完了,注入的类型基本上分为三块,普通类型,引用类型和集合。下面在讲一种基于注解来注入各种,因为基于xml感觉很麻烦。
五、属性依赖注入基于注解
注解格式:@xxx
使用注解:必须对使用注解的地方进行扫描,不然注解没用。而扫描需要做两件事
1、添加名称空间,
在我们找配置文件中约束的位置那:spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\xsd-config.html 找到context的名称空间。

2、扫描指定的目录,

注解:
1、@Component 替代 <bean id="" class=""> 可以配置任意bean,在所在类上面添加该注解即可,
@Component("userId") userId相当于bean中的id属性值
2、 这三个就跟使用@Component是一样的,但是为了更好的体现三层架构,就有了这三个注解
@Controller 修饰web层中的类。
@Service 修饰service层的类
@Repository 修饰dao层的类
两种方式,一种不声明名称,一种声明名称
@Controller("xxx") @Controller
如果声明了名称,那么在别的地方引用的话,就可以使用@Autowired或@Autowired与@Qualifier的组合 或直接使用@Resource按照名称注入
如果没有声明名称,那么在别的地方引用的话,只能使用@Autowired 来进行注入
3、属性注入
普通属性
@Value @Value("") 给普通属性注入属性值
引用属性
@Autowired 按默认类型进行注入
@Qualifier("") 按照名称注入
如果使用了@Qualifier这个注解,那么就需要两个一起使用才能生效。如果只使用@Autowired,那么写不写@Qualifier都可以
引用属性
@Resource 直接按照名称注入,与上面两个注解一起使用是等效的
@Resource(name="xxx")
4、使用

5、其他注解
@Scope("prototype") 作用域注解(spring帮我们创建的bean实例的作用域,在下面会讲解到)
@PostConstruct 修饰初始化
@PreDestory 修饰销毁
最后两个用的不多,掌握前面的即可。
六、spring创建的bean的作用域
也就是spring帮我们创建的bean的使用范围。
格式:<bean id="" class="" scope="....">
取值:
掌握前两个,singleton 和prototype
singleton:单例,也就是当spring通过xml配置文件帮我们创建一个bean对象时,那我们拿到的就一直是同一个对象,仅存在一个那样的bean实例。默认值


prototype:每次我们需要bean实例时,都会创建一个新的实例。


七、编写applicationcontext.xml提示问题
五步即可解决
第一步:spring的核心jar中找到Scheme xsd文档
spring-framework-3.2.0.RELEASE\schema\beans\spring-beans-3.2.xsd

第二步:从xml配置文件中,获取xsd文档位置,复制....spring-beans.xsd

第三步:window/preferences/ 搜索 “xml catalog”
第四步:

第五步:

注意:如果xml没有提示,关闭xml重写打开。
八、总结
spring的第一个重点IOC,就这样讲完了,其实看完之后非常简单,就是让spring给你创建对象,你想要对象的时候,就找spring,让他给。
学的东西有:
什么是IOC,什么是依赖注入。
之后对依赖注入进行详细的讲解。
使用xml方式和使用注解方式
说简单点,这一节就是学会了通过配置,让spring帮我们创建我们想要的bean,
spring(一) IOC讲解的更多相关文章
- Spring之IOC讲解
一.SpringIOC的好处: ioc的思想最核心的地方在于,资源不由使用资源的双方管理,而由不使用资源的第三方管理,这可以带来很多好处. 1.资源集中管理,实现资源的可配置和易管理. 2.降低了使用 ...
- spring的IOC和AOP详细讲解
1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是有这个IOC容器进行产生,同时, ...
- spring的IOC和AOP
spring的IOC和AOP 1.解释spring的ioc? 几种注入依赖的方式?spring的优点? IOC你就认为他是一个生产和管理bean的容器就行了,原来需要在调用类中new的东西,现在都是 ...
- spring容器IOC创建对象<三>
问题?Spring的DI讲解.DI有几种注入方式.一.spring的DI:依赖注入给属性赋值DI定义:一个对象类的属性可以使用springDI(依赖注入)来进行赋值,但是并不是所有的类属性都适合spr ...
- Spring的IOC
引用:http://www.cnblogs.com/xdp-gacl/p/4249939.html 学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念 ...
- Spring (一) IOC ( Inversion Of Control )
前序 现在小米手机很火就还拿小米手机来举例子,上一篇写的关于SSH框架搭建是从小米手机公司内个整个流程方面来考虑,如何提高效率生产效率,这篇博客主要从公司外部环境说明如何提高生产效率,那么怎么才能提高 ...
- 浅析对spring中IOC的理解
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- 对Spring中IOC和DI的理解
前几篇讲了Spring中IOC和DI的用法,本篇应该放到三篇之前,但一直没有想到好的讲解方式,后参考https://blog.csdn.net/luoyepiaoxue2014/article/det ...
- Spring中ioc的实现原理
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
随机推荐
- 笑谈ArcToolbox (2) 开启ArcToolbox的钥匙
笑谈ArcToolbox (2) 开启ArcToolbox的钥匙 by 李远祥 GIS人遇到ArcToolbox就像找到了宝藏一样兴奋,但并不是每个找到宝藏的人都具备开启宝藏的钥匙.有时候功能强大并不 ...
- 2.JAVA垃圾回收机制
前言 线程独享的内存区域有程序计数器,虚拟机栈,本地方法栈,这些区域不用考虑内存回收的问题,随着线程的执行结束,自然就回收了,而堆内存和方法区的回收则不一样,他们的内存分配和回收是动态的. 1.对象存 ...
- java 多线程之卖票两种方式
1.通过extends Thread /* 需求:简单的卖票,多个窗口同时买票 (共用资源) 创建线程的第二种方式:实现Runnable接口 步骤: 1,定义类实现Runnable接口 2,覆盖/重写 ...
- Windows内存管理简介:
1:连续的内存空间分配: (1)单一连续分配:只能单作业,单任务运行: 分为系统和用户区:用户区是指除了系统需外左右的内存,由于单用户,单任务,要不都被占用,要不全空 (2):固定空间分配:固定分 ...
- 部分linux系统命令(shell 命令)和hadoop命令
linux系统命令(shell 命令): ls : 只列出文件/目录 ls -l : 会显示文件的详情,如大小等 ls -lh : 会显示文件的详情,但大小以k或者M为单位 ls ../ : ...
- web前端学习路线推荐(讲的很细致)
前端要学习三个部分:HTML,CSS,JavaScript(简称JS),因此首先明确三个概念:HTML是内容层,它的目的是表示一个HTML标签在页面里是个什么角色. CSS是样式层,它的目的是表示一块 ...
- css 居中,中央
在我的技巧里,有4中居中中央的方法: 1.position:absolute; top:50%;left:50%; margin : -x 0 0 -x; 这是绝对定位的方法,通过算法移动,坏处就是必 ...
- 第25篇 jQuer快速学习(上)---选择器和DOM操作
这个文章经历的时间比较长,不是因为jQuery比较难,而是东西比较多,真心是个体力活.所以本来想把jQuery做成一篇去写,但由于写的时候发现jQuery发现写成一篇的话过于长,对于阅读起来也不是一个 ...
- STL_deque双端队列
deque:元素数据采用分块的线性结构存储.若干线性存储块成为deque块.一般大小为512字节,元素的数据类型所占用的字节数,决定了每个deque块可容纳的元素个数. 所有的deque块使用一个Ma ...
- Java设计模式之接口型模式总结
摘要: 原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6508967.html 之前认真学习了Java设计模式中的四大接口型模式,分别为:适 ...