Spring-IOC
2015-12-25 13:07
399 查看
Spring-IOC(Inversion of Control ,控制反转或依赖注入)
1 理解Spring IOC
IOC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序。传统应用程序都是由我们在类内部主动创建依赖对象,从而导致类与类之间高耦合,难于测试;有了IOC容器后,把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,所以对象与对象之间是松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。其实IOC对编程带来的最大改变不是从代码上,而是从思想上,发生了“主从换位”的变化。应用程序原本是老大,要获取什么资源都是主动出击,但是在IOC思想中,应用程序就变成被动的了,被动的等待IOC容器来创建并注入它所需要的资源了。
2 依赖注入通常有如下两种方式:
设值注入:IOC容器使用属性的Setter方法来注入被依赖的实例。package com.cy.service.impl; import com.cy.bean.UserInfo; import com.cy.dao.IUserDao; import com.cy.service.IUserService; public class UserServiceImpl implements IUserService{ private IUserDao dao; public void setUserDao(IUserDao dao){ this.dao=dao; } @Override public void addUser(UserInfo user) { dao.addUser(user); } }
在ApplicationContext.xml中设置
<bean id="userServiceImpl" class="com.cy.service.impl.UserServiceImpl"> <property name="userDao" ref="userDaoImpl"></property> </bean> <bean id="userDaoImpl" class="com.cy.dao.impl.UserDaoImpl"></bean>
在配置文件中,Spring配置Bean实例通常会指定2个属性:
Id:指定该Bean的唯一标识,程序通过ID属性值来访问该BEAN实例。
Class:指定该BEAN的实现类,此处不可再用接口(接口是不能实例化的),必须使用实现类,Spring容器会使用XML解析器读取该属性值,并利用反射来创建该实现类的实例。
构造注入:IOC容器使用构造器来注入被依赖的实例。这种方式在构造实例时,已经为其完成了依赖关系的初始化。
3 spring容器:
Bean工厂(BeanFactory)、应用上下文(ApplicationContext)。Bean工厂和应用上下文的区别。
应用上下文是Bean工厂的子接口,功能更为强大,扩展了企业级服务:电子邮件服务,JNDI服务。
Bean工厂是延迟加载,应用上下文是立即加载。
spring容器中取出的实体对象默认是单例模式。
应用上下文的实现类作用。
ClassPathXmlApplicationContext 从src目录下查询。
FileSystemXmlApplicationContext 从工程下查询
XmlWebApplicationContext 从web项目的webroot下查询
4、bean装配的方式,value和ref的含义。
value是直接赋值,ref引用已经注册的bean。
bean默认是单例模式。利用scope="prototype"提供多实例。
bean的装配支持List、Set、Map、Properties 数组。
相关文章推荐
- Java虚拟机字节码指令
- sftp plugin for eclipse 集成
- JAVA实现排队论
- JavaWeb课程设计_宿舍管理系统01
- web设置session超时时间
- 在web.xml中注册IntrospectorCleanupListener监听器以解决spring mvc等框架可能产生的内存泄露问题
- Java基础学习总结(33)——Java8 十大新特性详解
- Java基础学习总结(33)——Java8 十大新特性详解
- Java8 十大新特性详解
- 获取汉字拼音 Java
- 源码分析 There is no getter for property named '*' in 'class java.lang.String
- Java中字节与对象之间的转换
- Java API —— File类
- JAVA操作properties文件
- Spring mvc4 + ActiveMQ 整合
- 使用maven搭建Spring MVC
- 使用maven搭建Spring MVC
- Struts2使用struts2-convention-plugins
- opencv UnsatisfiedLinkError: no opencv_java249 in java.library.path
- Java中的statickeyword具体解释