Spring实战(第三版)—学习笔记分享

最近在看《Spring实战(第三版)》第三版,很好的一本书。总结了一些基础笔记,分享一下:

一:控制反转

例子:

 public class PersonServiceBean {
 private PersonDao personDao = new PersonDaoBean();
   public void save(Person person){
        personDao.save(person);
 }
}

PersonDaoBean 是在应用内部创建及维护的。所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器(Spring)负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转。 要实现控制反转,就得靠依赖注入。

二:依赖注入(DI):

所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。 当我们把依赖对象交给外部容器负责创建,那么PersonServiceBean 类可以改成如下:

public class PersonServiceBean {
 private PersonDao personDao ;
//通过构造器参数,让容器把创建好的依赖对象注入进PersonServiceBean,当然也可以使用setter方法进行注入。
 public PersonServiceBean(PersonDao personDao){
     this.personDao=personDao;
 } 
  public void save(Person person){
     personDao.save(person);
 }
}

所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。

实例化Spring容器常用的两种方式:

方法一:在类路径下寻找配置文件来实例化容器

ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});

方法二: 在文件系统路径下寻找配置文件来实例化容器

ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{“d:\\beans.xml“});

Spring的配置文件可以指定多个,可以通过String数组传入。

三:Bean的作用域

singleton

在每个Spring IoC容器中一个bean定义只有一个对象实例。默认情况下会在容器启动时初始化bean,但我们可以指定Bean节点的lazy-init=“true”来延迟初始化bean,这时候,只有第一次获取bean会才初始化bean。如: 如果想对所有bean都应用延迟初始化,可以在根节点beans设置default-lazy-init=“true“,如下: <beans default-lazy-init="true“ ...>

.prototype

每次从容器获取bean都是新的对象

request

.session

.global session

四:Bean何时被实例化??

要验证何时被实例化,只要在类中的默认构造函数中输出一句话即可 单例模式下:默认Spring容器初始化时业务bean就被实例化。如果在<bean lazy-init="true">,则不会被初始化,延迟了实例化。 如果<bean scope=“prototype”>,则在调用getBean()时实例化