刨析spring的内幕

1. 谈谈你对 Spring 的理解

Spring 是一个开源框架,为简化企业级应用开发而生。Spring可以使简单的
JavaBean 实现以前只有EJB 才能实现的功能。Spring是一个 IOC 和 AOP 容器框架。

Spring 容器的主要核心是

控制反转(IOC),传统的 java 开发模式中,当需要一个对象时,我们会自己使用 new 或者 getInstance 等直接或者间接调用构造方法创建一个对象。而在spring 开发模式中,spring容器使用了工厂模式为我们创建了所需要的对象,不需要我们自己创建了,直接调用spring 提供的对象就可以了,这是控制反转的思想。

依赖注入(DI),spring 使用 javaBean 对象的 set 方法或者带参数的构造方法为我们在创建所需对象时将其属性自动设置所需要的值的过程,就是依赖注入的思想。

面向切面编程(AOP),在面向对象编程(oop)思想中,我们将事物纵向抽成一个个的对象。而在面向切面编程中,我们将一个个的对象某些类似的方面横向抽成一个切面,对这个切面进行一些如权限控制、事务管理,记录日志等

公用操作处理的过程就是面向切面编程的思想。AOP底层是动态代理,如果是接口采用JDK 动态代理,如果是类采用CGLIB方式实现动态代理。

2. Spring 中的设计模式

a. 单例模式——spring
中两种代理方式,若目标对象实现了若干接口,spring
使用 jdk 的 java.lang.reflect.Proxy类代理。若目标兑现没有实现任何接口,spring 使用 CGLIB 库生成目标类的子类。

单例模式——在 spring 的配置文件中设置 bean 默认为单例模式。

b. 模板方式模式——用来解决代码重复的问题。

比如:RestTemplate、JmsTemplate、JpaTemplate

d. 前端控制器模式——spring
提供了前端控制器
DispatherServlet 来对请求进行分发。

e. 试图帮助(view
helper)——spring 提供了一系列的 JSP 标签,高效宏来帮助将分散的代码整合在试图中。

f. 依赖注入——贯穿于
BeanFactory/ApplacationContext 接口的核心理念。

g. 工厂模式——在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用同一个接口来

指向新创建的对象。Spring
中使用 beanFactory 来创建对象的实例。

3. Spring 的常用注解

Spring 在
2.5 版本以后开始支持注解的方式来配置依赖注入。可以用注解的方式来代替
xml 中 bean 的描述。注

解注入将会被容器在
XML 注入之前被处理,所以后者会覆盖掉前者对于同一个属性的处理结果。

注解装配在 spring 中默认是关闭的。所以需要在 spring 的核心配置文件中配置一下才能使用基于注解的装配模

式。配置方式如下:

<context:annotation-config />

常用的注解:

@Required:该注解应用于设值方法

@Autowired:该注解应用于有值设值方法、非设值方法、构造方法和变量。

@Qualifier:该注解和@Autowired
搭配使用,用于消除特定
bean 自动装配的歧义。

4. 简单介绍一下 Spring bean 的生命周期

bean 定义:在配置文件里面用来进行定义。

bean 初始化:有两种方式初始化:

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

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

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

bean 销毁:销毁有两种方式

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

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

5. Spring 能帮我们做什么?

a. Spring 能帮我们根据配置文件创建及组装对象之间的依赖关系。

Spring 根据配置文件来进行创建及组装对象间依赖关系,只需要改配置文件即可

b. Spring 面向切面编程能帮助我们无耦合的实现日志记录,性能统计,安全控制。

Spring 面向切面编程能提供一种更好的方式来完成,一般通过配置方式,而且不需要在现有代码中添加任何额外代码,现有代码专注业务逻辑。

c. Spring 能非常简单的帮我们管理数据库事务。

采用 Spring,我们只需获取连接,执行 SQL,其他事物相关的都交给 Spring 来管理了。

d. Spring 还能与第三方数据库访问框架(如
Hibernate、JPA)无缝集成,而且自己也提供了一套 JDBC访问模板,来方便数据库访问。

e. Spring 还能与第三方
Web(如 Struts、JSF)框架无缝集成,而且自己也提供了一套 Spring MVC框架,来方便 web 层搭建。

f. Spring 能方便的与
Java EE(如 Java Mail、任务调度)整合,与更多技术整合(比如缓存框架)。

6. 请描述一下 Spring 的事务

声明式事务管理的定义:用在
Spring 配置文件中声明式的处理事务来代替代码式的处理事务。这样的好

处是,事务管理不侵入开发的组件,具体来说,业务逻辑对象就不会意识到正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要改变事务管理策划的话,也只需要在定义文件中重新配置即可,这样维护起来极其方便。

基于
TransactionInterceptor 的声明式事务管理:两个次要的属性:
transactionManager,用来指定一个事务治理器,并将具体事务相关的操作请托给它;其他一个是Properties 类型的transactionAttributes
属性,该属性的每一个键值对中,键指定的是方法名,方法名可以行使通配符,而值就是表现呼应方法的所运用的事务属性。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值