Spring的部分知识

1、Spring是什么?

     Spring是一个分层的开源的轻量级Java SE(Java 标准版本)/Java EE(Java 企业版本)开发应用框架,其目的是为了解决企业应用开发的复杂性解决业务逻辑层和其他各层的松耦合问题。应用程序是由一组相互协作的对象组成。Spring是一个IOC和AOP容器框架。

2、Spring有什么特征?

  • 轻量级 Spring 框架的基础版本是在 2 MB 左右的;Spring是非侵入性的 - 基于Spring应用的开发中的对象可以不依赖于Spring的的特定类(API); 
  • 控制反转 IOC;促进低耦合,通过IOC将创建对象的权力交给Spring框架,当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。IoC与DI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它;
  • 面向切面编程 AOP:利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率;
  • 容器 Spring是一个容器,因为它包含管理应用对象的配置和生命周期;
  • 框架 Spring实现了使用简单的组件配置组合成一个复杂的应用,在spring中可以使用xml和java注解组合这些对象,Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。
  • 一站式 在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库;

3、为什么使用Spring?

降低组件之间的耦合度,实现软件各层之间的解耦。可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务.也不需处理复杂的事务传播。
容器提供单例模式支持,开发人员不再需要自己编写实现代码。
容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。
容器提供的众多辅作类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate。

Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,这样更便于应用的开发。

4、Spring的优点有哪些?

  • 方便解耦,简化开发 
  • Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理 
  • AOP编程的支持 
  • Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
  • 声明式事务的支持 
  • 只需要通过配置就可以完成对事务的管理,而无需手动编程
  • 方便程序的测试 
  • Spring对Junit4支持,可以通过注解方便的测试Spring程序
  • 方便集成各种优秀框架 
  • Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
  • 降低JavaEE API的使用难度 
  • Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

5、IOC

5.1 什么是IOC

IOC(Inversion of Controller)其思想是反转资源获取的方向,传统的资源查找方式要求组件向容器发起请求查找资源,作为回应,适时得返回资源。Dog dog = new Dod();而使用了IOC之后,则是容器主动得将资源推送给他所管理的组件,组件所要做的仅是选择一种合适的方式来接受资源,这种行为也被称为查找的被动方式。

5.2 什么是DI

DI(Dependency Injection)IOC的另一种表述方式:即组件以一些预定义好的方式(例如:setter方法),接受来自容器的资源注入,相对于IOC而言,这种表述更直接

5.3 IOC和DI的区别

  • IoC Inverse of Control 控制反转的概念,就是将原本在程序中手动创建UserService对象的控制权,交由Spring框架管理,简单说,就是创建UserService对象控制权被反转到了Spring框架
  • DIDependency Injection 依赖注入,在Spring框架负责创建Bean对象时,动态的将依赖对象注入到Bean组件

6、Spring框架Bean实例化的方式

  • 三种方式实例化Bean 
    • 构造方法实例化(默认无参数)
    • 静态工厂实例化
    • 实例工厂实例化

7、Spring 配置共有三种方式:基于XML的配置、基于JAVA配置和基于注解配置

基于JAVA配置和基于注解配置:

https://blog.csdn.net/durendong/article/details/54566027

基于XML的配置:

在XML配置中,通过<bean> </bean>来定义Bean,通过id或name属性定义Bean的名称,如果未指定id和name属性,Spring则自动将全限定类名作为Bean的名称。通过<property>子元素或者p命名空间的动态属性为Bean注入值。还可以通过<bean>的init-method和destory-method属性指定Bean实现类的方法名来设置生命过程方法(最多指定一个初始化方法和销毁方法)。通过<bean>的scope指定Bean的作用范围。听过<bean>的lazy-init属性指定是否延迟初始化。

当Bean的实现类来源于第三方类库,比如DataSource、HibernateTemplate等,无法在类中标注注解信息,只能通过XML进行配置;而且命名空间的配置,比如aop、context等,也只能采用基于XML的配置。

<bean id=“loginUserDao” class=“com.chinalife.dao.impl.LoginUserDaoImpl”  
        lazy-init=“true” init-method=“myInit” destroy-method=“myDestroy”  
        scope=“prototype”>   
</bean>

8、Bean的生命周期和作用域

(1)bean定义

    在配置文件里面用<bean></bean>来进行定义。

(2)bean初始化

    有两种方式初始化:

A.在配置文件中通过指定init-method属性来完成

B.实现org.springframwork.beans.factory.InitializingBean接口

(3)bean调用

    有三种方式可以得到bean实例,并进行调用

(4)bean销毁

    销毁有两种方式

A.使用配置文件指定的destroy-method属性

B.实现org.springframwork.bean.factory.DisposeableBean接口

##作用域

singleton

当一个bean的作用域为singleton, 那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。

prototype

Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean() 方法)时都会创建一个新的bean实例。根据经验,对所有有状态的bean应该使用prototype作用域,而对无状态的bean则应该使用 singleton作用域

request

在一次HTTP请求中,一个bean定义对应一个实例;即每次HTTP请求将会有各自的bean实例, 它们依据某个bean定义创建而成。该作用 域仅在基于webSpring ApplicationContext情形下有效。

session

在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于webSpring ApplicationContext情形下有效。

global session

在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于 webSpring ApplicationContext情形下有效。







阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zlc15138071827/article/details/79977982
文章标签: Spring
个人分类: 面试题 Java基础
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭