目录
学习spring最关键一点
思想变化:Spring本身就是一个大工厂,把耦合交给spring,追求的就是低耦合高内聚(不过还是耦合了spring)
核心特征
IOC控制反转:代码耦合高
要求:不修改原有源代码(java代码)实现需求:
增加ProductMyBatisDaoImpl 使用的service层,把实现改了
最终实现效果:
修改配置文件,然后实现类就改变
1.提供一个BeanFactory(工厂方法)
BeanFactory.getDao(“productDao”,IProductDao .class);
productDao=cn.itsource.product.dao.impl.ProductDaoImpl
2.Spring
Action层scope=”prototype”变成多例,使用一次new一次
//单例
<bean id=”productDao” class=”cn.itsource.product.dao.impl.ProductDaoImpl” />
//多例(访问一次,就new一次)
<bean id=”productAction” class=”cn.itsource.product.dao.impl.ProductAction” scope=”prototype”/>
DI依赖注入:对象之间依赖关系处理繁琐
Service层依赖于dao层
ProductServiceImpl
private IProductDao productDao = new ProductDaoImpl();
1.如果用BeanFactory来处理service层?会遇到什么问题?
BeanFactory.getService(“productService”,IProductService .class);
productDao=cn.itsource.product.dao.impl.ProductDaoImpl
productService=cn.itsource.product.dao.impl.ProductServiceImpl
怎样处理service依赖dao的问题
2.Spring
<bean id=”productDao999” class=”cn.itsource.product.dao.impl.ProductDaoImpl”/>
<bean id=”productService” class=”cn.itsource.product.dao.impl.ProductServiceImpl”>
在spring配置文件出现的name属性都是指的java的属性名 setProductDao方法
属性productDao需要引用dao的实例
<property name="productDao000" ref="productDao999"/>
</bean>
AOP编程:事务控制和业务代码耦合
xxx编程
OOP面向对象编程
封装,继承,多态,抽象 基础
Aop 面向切面编程(实现不修改原有java代码前提下,就实现额外(增强)功能) 对oop的补充
处理各层公共功能:日志管理(每层),事务管理(service层),权限管理(Action层,Service层)
Spring应用意义
Spring是一个轻量级的DI/IoC和AOP容器框架。存在的目的是用于构建轻量级的J2EE应用。
轻量级:应用大小和应用开支,包括应用方式
DI/IoC:提供松耦合的一种实现技术
AOP:切面编程将业务逻辑从应用服务中分离
容器:包含并管理应用对象的生命周期和配置
框架:使用组件配置组合成复杂的应用,并提供很多基础功能
Spring提供了对开源社区中很多框架及JavaEE中很多技术的支持,让程序员很轻松能整合及使用这些框架技术。
Spring以一种非侵入式的方式来管理你的代码,Spring提倡”最少侵入”,这也就意味着你可以适当的时候安装或卸载Spring 。
With out EJB :JavaEE可以不使用sun EJB