SpringIOC学习一
Spring是一个轻量级的控制反转(IOC)和面向切面(IOP)的容器框架
1.控制反转IOC(inversion of controller)
IOC是一种概念,是把我们程序中类与类之间的依赖关系交给容器去处理,一般有两种方式:
* 依赖查找DL(dependency lookup):程序根据查找方式,交给容器去查找
* 依赖注入DI(dependency injection):程序不提供查找方式,提供合适的构造方法或者setter方法,让容器进行注入来解决依赖关系,spring的控制反转就是通过依赖注入来实现的
2.什么叫依赖?
简单的说,一个类实现某个功能需要另外一个类的帮助来实现(模拟一个web登陆验证的功能),详见UserService.java
3.基于接口编程的开发方式
当一个方法有多个实现的情况下,我们一般是基于接口的方式进行编程,详见UserServiceForInterface.java
4.依赖注入
依赖注入DI是指一个对象需要另外一个对象的时候,无需在代码中创建被调用者,而是依赖于外部容器,由外部容器创建后传递给程序
依赖注入是目前位置最好的解耦方式,因为依赖关系是依靠配置文件的方式组织在一起,而不是在程序中的硬编码
5:Spring的IOC容器通过依赖注入来实现程序之间的依赖关系,达到解耦的作用
a : spring项目环境搭建需要的jar包
* spring-beans-4.2.1.RELEASE.jar
* spring-context-4.2.1.RELEASE.jar
* spring-core-4.2.1.RELEASE.jar
* spring-expression-4.2.1.RELEASE.jar
* commons-logging.jar
* hamcrest-core-1.3.jar
* junit-4.11.jar
* log4j-1.2.17.jar
b:配置文件 applicationContext.xml,加上bean约束
bean的约束在spring-framework-4.2.1.RELEASE\
docs\spring-framework-reference\html\xsd-configuration.html文件查看
6:在spring文件上面实现依赖注入的两种方式
1: 在配置文件定义我们的类
<!--相当于我们java代码的 UserService userService = new UserService() -->
<bean id= "userService"
class = "com.tz.spring.sysmanage.service.UserServiceForSpring"></bean>
<!--相当于我们java代码的 UserDao userDao = new UserDao() -->
<bean id = "userDao"
class = "com.tz.spring.sysmanage.dao.impl.UserDao"></bean>
<!--相当于我们java代码的 UserDaoOther userDaoOther = new UserDaoOther() -->
<bean id= "userDaoOther"
class= "com.tz.spring.sysmanage.dao.other.UserDaoOther"></bean>
2:描述依赖关系有两种方式
* 通过构造方法的方式注入:
a:被依赖的类必须有构造方法
b:在配置文件里面来描述依赖关系
<bean id= "userService" class = "com.tz.spring.sysmanage.service.UserServiceForSpring">
<constructor-arg ref="userDao"></constructor-arg>
<constructor-arg ref="userDaoOther"></constructor-arg>
</bean>
* 通过setter方法注入
a:被依赖的类里面生成依赖类的setter方法
b:在配置文件来描述依赖关系
<bean id= "userService"
class = "com.tz.spring.sysmanage.service.UserServiceForSpring">
<property name="userDao" ref="userDaoOther"></property>
</bean>
最新文章
- 【emWin】例程一:emWin系列教程简介
- 初学者-微信小程序 问题解决办法记录
- DMA控制
- 深入浅出Symfony2 - 结合MongoDB开发LBS应用
- MAC下反編譯安卓APK
- 雷赛dmc2410控制卡,驱动器 光栅 加电机
- [Outlook] Outlook2013能收但无法发送邮件-0x800CCC13, 0x800CCC0B, 0x8004210B
- PostgreSQL Replication之第十四章 扩展与BDR
- Hibernate级联操作
- android获取Mac地址和IP地址
- [转]云计算之hadoop、hive、hue、oozie、sqoop、hbase、zookeeper环境搭建及配置文件
- 201521123003《Java程序设计》第5周学习总结
- 1、IDEA的常用快捷键
- 【bfs】拯救少林神棍(poj1011)
- 使用scrapy爬取百度股票
- SEO高手和SEO屌丝的八个区
- Python3 tkinter基础 LabelFrame Radiobutton 形成两组不相互限制的单选按钮
- win10上安装keras
- TCP keep-alive翻译
- 深入了解Looper、Handler、Message之间关系
热门文章
- CSS奇思妙想图形(心形、气泡三角形、切角、梯形、饼图等)
- php数组排序和查找的算法
- MySQL之数据的insert-delete-update操作
- 第七周PTA作业
- 20155306 2017-2018-1《信息安全系统设计》第二周课堂测试以及myod的实现
- 算法第四版 coursera公开课 普林斯顿算法 ⅠⅡ部分 Robert Sedgewick主讲《Algorithms》
- 使用Github pages+jekyll搭建自己的博客(windows版)
- Django之ORM字段和参数
- Python脚本自动提取和替换代码中的中文
- JAVA_SE基础——32.this关键字调用本类的构造方法