【Spring | 个人笔记】

【javaee体系结构】
1.Client客户端层
    DHTML
    Java Application
2.Web表现层 | Spring MVC
    Servlet、JSP
3.Business业务层 | 控制反转IoC、切面AOP、事务管理
    JavaBean、EJB
    只需要配置就可以完成事务管理 

4.EIS集成层(持久层)| 封装了jdbc、另外支持其他ORM框架整合
    Jdbc、数据库操作相关
其中2.3.4是服务器端的经典三层结构。| 一站式 | 轻量级
html与jsp:客户端看到的是html,jsp编译成html返回给客户端
strucrs2属于表现层,Hibernate、MyBatis属于持久层


Spring 核心在于Core Container。  就是基于IoC和AOP的一套编程框架。
    IoC(反转控制)将对象创建权利交给Spring工厂进行管理
    AOP(面向切面编程)基于动态代理功能增强

DI 和IoC:都是将对象控制权交给第三方(Spring)管理,只是站在不同角度。

【DI 依赖注入】在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件。即它可以将一个bean对象动态的注入到另外一个bean中。

ApplicationContext(应用上下文)是用来加载Spring框架配置文件,来构建Spring的工厂对象,也称之为Spring容器的上下文对象,Spring的容器。它只是BeanFactory(Bean工厂,Bean就是一个Java对象)一个子接口。
通过getBean方法获得Spring容器管理Bean对象(根据名称/类型两种方式获取,常用根据名称):一般applicationContext.xml在src下,ClassPathXmlAapplication读取。若放在WEB-INF下,FileSystemXmlApplicationContext读取。


【bean的实例化】bean的对象就是普通的pojo

  1. 无参构造方式来实例化bean对象(最常用):底层是Spring默认的工厂实例化对象
  2. 静态工厂方式获取bean对象:静态工厂提供了一个静态方法来实例化bean,该静态方法用来获取bean的对象,必须指定工厂方法(factory-method)。这种方法配置返回的是该方法返回的bean对象。(这里可以定制自己的工厂,更灵活) 。该方法框架初始化时用的多。
  3. 实例工厂来获取bean对象(必须先实例化工厂(factory-bean,要写实例工厂的bean的名字,类似ref),再配置方法):编写一个普通的方法来初始化bean对象,定制工厂可以初始化一些数据。该方法框架初始化时用的多。
  4. 工厂bean的方式实例化bean(泛型就是要实例化的对象类型):Spring会自动调用该接口的getObject来获取具体的对象。该方法Spring底层用的多。

BeanFactory和FactoryBean的区别
BeanFactory是一个工厂(其实是构建了一个spring上下文的环境,容器),用来管理和获取很多Bean对象。
FactoryBean是一个Bean生成工具,用来获取一种类型对象的Bean,它是构造Bean实例的一种方式

【Bean的作用域】

  1. singleton单例模式(默认值,如果需要单例对象,不需要配置scope):在spring IOC容器中仅存在一个Bean实例,Bean以单例方式存在。单例情况下,在容器初始化的时候,bean就已经被初始化了。必须手动关闭容器时,才会执行手动销毁的方法。
  2. prototype多例模式:每次从容器中调用Bean时,都返回一个新的实例,即每次调用getBean()时,相当于执行new XXXBean()。多例情况下,容器初始化的时候,不初始化bean,只有getBean(获取的)的时候才初始化bean,而且每次getbean都会初始化一个不同的bean。多例的默认情况下无法调用销毁方法,多例没有强制销毁。
  3. request
  4. session
  5. globalSession

Spring中Bean的生命周期:在说明前可以思考一下Servlet的生命周期:实例化,初始init,接收请求service,销毁destroy;
    Spring上下文中的Bean也类似,如下

注:以上工作完成以后就可以应用这个Bean了,那这个Bean是一个Singleton的,所以一般情况下我们调用同一个id的Bean会是在内容地址相同的实例,当然在Spring配置文件中也可以配置非Singleton,这里我们不做赘述。 

  1. 实例化一个Bean--也就是我们常说的new;
  2. 按照Spring上下文对实例化的Bean进行配置--也就是IOC注入;
  3.  如果这个Bean已经实现了BeanNameAware接口,会调用它实现的setBeanName(String)方法,此处传递的就是Spring配置文件中Bean的id值
  4.  如果这个Bean已经实现了BeanFactoryAware接口,会调用它实现的setBeanFactory(setBeanFactory(BeanFactory)传递的是Spring工厂自身(可以用这个方式来获取其它Bean,只需在Spring配置文件中配置一个普通的Bean就可以);
  5. 如果这个Bean已经实现了ApplicationContextAware接口,会调用setApplicationContext(ApplicationContext)方法,传入Spring上下文(同样这个方式也可以实现步骤4的内容,但比4更好,因为ApplicationContext是BeanFactory的子接口,有更多的实现方法);
  6. 如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessBeforeInitialization(Object obj, String s)方法,BeanPostProcessor经常被用作是Bean内容的更改,并且由于这个是在Bean初始化结束时调用那个的方法,也可以被应用于内存或缓存技术;
  7. 如果Bean在Spring配置文件中配置了init-method属性会自动调用其配置的初始化方法。
  8. 如果这个Bean关联了BeanPostProcessor接口,将会调用postProcessAfterInitialization(Object obj, String s)方法;
  9. 当Bean不再需要时,会经过清理阶段,如果Bean实现了DisposableBean这个接口,会调用那个其实现的destroy()方法;
  10. 最后,如果这个Bean的Spring配置中配置了destroy-method属性,会自动调用其配置的销毁方法。

以上10步骤可以作为面试或者笔试的模板,另外我们这里描述的是应用Spring上下文Bean的生命周期,如果应用Spring的工厂也就是BeanFactory的话去掉第5步就Ok了。

【Bean的属性依赖注入】

     注:Spring框架规范中通过配置文件配置的方式,只支持构造器参数注入和setter方法属性注入

  1. 构造器注入
  2. setter方法属性注入(setter方法的规范-JavaBean规范)
  3. 属性名首字母大写 前面加 set
  4. 接口注入(不推荐)

 


 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值