看Spring实战有感(一)

忘记以前看到哪儿了,再从头看吧!

Spring的两个核心特性,依赖注入dependency injection和面向切面编程aspect-oriented programming,它的根本使命是简化java开发,采用了以下四种关键策略:
- 基于POJO的轻量级和最小入侵性编程;
- 通过依赖注入和面向接口实现松耦合;
- 基于切面和惯例进行声明式编程;
- 通过切面和模板减少样板式代码。

激发POJO潜能

不会强迫实现Spring接口和规范的类,非侵入性编程。
我觉得这样真的好,分的清楚!他不强行和你纠缠,想分就分,让人没有了压力

依赖注入

看前问题:maven实现的是依赖注入吗
类之间相互协作,导致代码高度耦合,并且还难以测试哪一块儿,不开心。
创建应用组件之间协作的行为 称为装配。spring中使用xml进行装配很常见,也可以通过java配置来实现。
Spring通过Application Context转载bean的定义并把它们组装起来。

应用切面

DI可以让相互协作的软件组件保持松散耦合,而AOP允许将遍布应用各处的功能分离出来形成可重用组件(这不禁Σ(っ °Д °;)っ让我回想起ps中的图层,当你觉得你做的事情是在重复,那么我们就要去解决它,我们当然可以用框架或者自己做一个框架,这时候就需要天马行空的想象了,我们不必追求细节或者循规蹈矩,只需要一个思路)。
- 系统关注点功能的代码重复出现在多个组件中(如果是我,应该想,反正都已经封装好了,每个调用一下也不是很费事,但其实呢,不优雅,notelegant!)
- 组件会变得混乱因为那些与自身核心业务无关的代码

很多例子都在描述现实世界,但大多时候我们进行了抽象,很多时候事物出离了本质或者本心或者自身运行的规则,但也有很多时候,最真实的往往是最简单的,你要对一个东西编程,你就要先理解什么,正如我想要编写出生命,那就应该先理解生命本身

将Minstrel bean声明为一个切面,首先需要将它声明为一个bean,然后引用该bean。前置通知,后置通知,pointcut-ref属性引用了名字问embank的切入点,语法为AspectJ。

<aop:config>
    <aop:aspect ref="minstrel">
        <aop:pointcut id="embark"
            expression = "execution(* *.embarkOnQuest(..))"/>  ---定义切点
        <aop:beforre pintcut-fef="embark"
            method="singBeforeQuest"/>  -----声明潜质通知
        <aop:after pintcut-fef="embark"
            method="singAfterQuest"/>  -----声明潜质通知
        </aop:aspect>
    </aop:config>
</beans>

通过少量声明将其声明成一个切面,Minstrel仍是一个POJO,其次,BraveKnight完全不知道Minstrel的存在。

使用模板消除样式代码

Spring旨在通过模板封装消除版式代码。书中以jdbc为例,展示了 spring中的jdbc template。

容纳你的bean

容器是Spring框架的核心,其容器并不是只有一个。自带多个容器实现归于两种类型,bean工厂,提供基本di支持,对于大部分应用太过低级。
应用上下文基于beanfactory构建,提供框架级服务,例如解析属性文件。

使用应用上下文

  • AnnotationConfigApplicationContext
  • AnnotationConfigWebApplicationContext
  • ClassPathXmlApplicationContext
  • FileSystenXmlapplicationcontext
  • XmlWebApplicationContext

哪种上下文将bean加载到bean工厂的过程都是类似的。应用上下文准备就绪之后后我们可以调用上下文的getBean()方法从Spring容器中获取bean。现在对如何创建Spring容器,对bean生命周期做更一步的探究。

我现在理解的上下文:如果把容器看作是一个盒子,那上下文不仅是盒子本身,还是把bean抓进来的手

bean的生命周期

实例化,填充属性,setBeanName(),setBeanFactory(),setApplicationContext(),
Processor()的预初始化方法,afterPropertiesSet()方法,调用自定义的初始化方法,processor的初始化方法,bean可以使用了,容器关闭,调用destroy,调用自定义的销毁方法

俯瞰Spring风景线

超乎你的想象。
这里写图片描述

Spirng模块

  • spring核心容器:最为核心的部分,挂历bean的创建配置和管理。包括了bean工厂,in which 提供DI。基于bean工厂有着多种上下文的实现。
  • AOP模块: 对面向切面编程的丰富支持
  • 数据访问与集成: Spring的JDBC和DAO模块抽象了这些样板式代码。除此以外,本模块还会使用AOP为Spring应用中的对象提供事务管理服务。
  • web与远程调用:MVC模式是一种普遍且被接收的构建web应用的方法,将界面逻辑与应用逻辑相分离。java从不缺少mvc,spring还提供了多终于其它应用交互的方案,自带远程调用框架,还提供了暴露和使用REST API的良好支持。
  • Instrumentation:体哦给你了为jvm添加代理的功能agent,为tomcat提供了一个织入代理,能够为tomcat传递类文件,使用场景有限,本书不会涉及(我还以为mvc的啥的都要基于它呢,原来很有限。。)
  • 测试: 未使用jndi,servlet,portlet编写单元测试提供了一系列的mock对象实现,对于集成测试,也为bean提供了交互支持。

Spring Portfilio

Spring是个大家族,如果只看framework会失去很多有价值的东西,提一下spring boot,致力于简化spring本身,也许我学好spring之后会去研究它。

小结

告一段落,最近想先干点别的事,估计会过一阵子再更新,这篇文章就是小结本身。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值