代码书写现状
-耦合度偏高
解决方案
-使用对象时,在程序中不要主动使用new产生对象,转换为由外部提供对象
IoC(Inversion of Control)控制反转
- 使用对象时,由主动new产生对象转换为由外部提供对象,此过程中对象创建控制权由程序转移到外部,此思想称为控制反转
Spring技术对IoC思想进行了实现
- Spring提供了一个容器,称为IoC容器,用来充当IoC思想中的"外部"
- IoC容器负责对象的创建,初始化等一系列工作,被创建或被管理的对象在IoC容器中统称为Bean
DI(DepenDency Injection) 依赖注入
- 在容器中建立bean与bean之间的依赖关系的整个过程,称为依赖注入
1.基于IoC管理bean
2.Service中使用new形式创建的对象是否保留?(否)
3.Service中需要的Dao对象如何进入到Service中?(提供方法)
4.Service与Dao的关系如何描述?(配置)
属性名称:scope
所属:bean标签
功能 :定义bean的作用范围,可选范围如下
范例:
适合交给容器进行管理的bean
不适合交给容器进行管理的bean
public class BookDaoImpl implements BookDao{public BookDaoImpl(){System.out.println("book constructor is running ...");}public void save(){System.out.println("book dao save ...");}
}
factory-method:告诉spring 静态工厂里面那个方法是创建对象的
public class OrderDaoFactory{public static orderDao getOrderDao(){return new OrderDaoImpl();
}
public class userDaoFactory{public UserDao getUserDao(){return new UserDaoImpl();}
}
public class UserDaoFactoryBean implements FactoryBean{//代替原始实例工厂中创建对象的方法public UserDao getObject() throws Exception{return new UserDaoImpl();}public Class> getObjectType(){return UserDao.class;
}
有两种格式
第一种是spring配置的格式
public class BookDaoImpl implements BookDao{public void save(){...}//初始化public void init(){...}//销毁前public void destory(){...}
}
初始化容器
使用bean
关闭销毁容器
1.执行bean销毁方法
关闭容器