spring之旅

一、spring简介

1、sprig使命:简化Java开发,spring主要通过一下集中策略来简化Java开发

1、基于pojo的轻量级和最小侵入性编程。

2、通过依赖注入和面向接口实现松耦合,并且易于测试。

3、基于切面和惯例进行声明式编程,减少耦合。

4、通过切面和模板减少样板式代码。(JdbcTemplate)

2、依赖注入

实际的应用都是由两个类或者更多的类组成,类之间通过相互协作来完成特定的业务逻辑。通常每个对象负责管理与自己相互协作的对象的引用,但是这将会导致高度耦合和难以测试的代码;

通过依赖注入的方式,对象的依赖关系将由负责协调系统中各个对象的第三方组件在创建对象时设定。对象无需自行创建或管理他们的依赖关系;这就大大的减少了对象之间的耦合,可以注入接口的方式给对象注入不同的实现;

创建组件之间协作的行为称为装配。spring有多种装配bean的形式(xml配置文件,注解等),spring通过应用程序上下文装载bean的定义并把他们组装起来。spring应用程序上下文全权负责 对象的创建和组装。

3、应用切面

依赖注入使相互协作的组件保持松散耦合,而aop编程允许你把遍布应用各处的功能分离出来形成可重用的组件,实际中,经常会用aop来分离一些和业务逻辑无关的功能,如日志、事务管理、安全等;

如果这些与业务逻辑混在一起,将会导致复杂的依赖关系:


而aop可以使这些服务模块化,并以声明的方式将它们应用到它们需要影响的组件中去,使这些组件具有更高的内聚性以及更加关注自身业务完全不需要了解系统服务的复杂性;


4、通过模板消除样板式代码

例如spring的JdbcTemplate

5、spring容器

在基于spring的应用中,容器生存与spring容器中,容器创建它们,装配它们,配置它们,管理它们的整个生命周期,从生存到死亡;

容器是spring框架的核心,spring容器通过依赖注入管理构成应用的组件,它会创建构成应用组件之间的关联;

spring自带几种容器的实现,可以归为两种不同的类型。

Bean工厂:最简单的容器,提供基本的di支持;

应用上下文:基本Bean工厂智商构建,提供面向应用的服务

6、应用程序上下文

ClassPathXmlApplicationContext:从类路径下的xml配置文件中加载上下文定义;

FileSystemXmlApplicationContext:读取文件系统下的xml配置文件并加载上下文定义;

XmlWebApplicationContext:读物web应用下的配置文件并装载上下文定义;

7、bean生命周期

1、spring对bean进行实例化

2、spring将值和bean的引用注入进bean对应的属性中。

3、如果bean实现了BeanNameAsare接口,spring将bean的id传递给setBeanName()接口方法


10、如果bean实现了DisposableBean接口,spring将调用它的destroy()方法。

二、xml装配Bean

1、声明Bean

其实就是建立一个POJO

2、配置Bean

spring提供了两种配置Bean的方式,xml配置文件和Java注解;

spring配置文件命名空间:


可以通过<beans>元素内增加一些<bean>来配置一个简单的bean,还可以通过构造函数和工厂方法来初始化bean

构造函数:

<bean>元素的constructor-arg属性,可以传入一些初始化参数;

工厂方法:

<bean>元素的factory-method属性;

3、Bean的作用域

所有的spring Bean默认都是单例,如果想要每次请求都获得一个bean实例,需要配置<bean>元素的scope属性


4、初始化和销毁bean

为bean定义初始化和销毁操作,只需要使用init-method和destroy-method参数来配置<bean>元素,init-method属性指定了初始化bean时调用的方法,而destroy-method属性指定了bean从容器中移除之前要调用的方法;

5、注入bean属性

<bean>元素的property属性

6、装配集合

当配置集合类型的bean属性时,spring提供了4中类型的集合配置元素


7、装配空值,null

8、使用spel表达式装配bean



三、注解装配bean

xml可以配置bean,但是随着应用程序的发展,我们不得不编写xml配置,幸运的是spring提供了另外方式装配bean:
自动装配:让是spring自动识别如何装配bean的依赖关系;
自动检测:比自动装配更近了一步,让spring自动识别哪些类需要配置成spring bean;

1、4种类型自动装配bean属性


2、使用注解装配
使用注解装配需要配置<context:annotation-config>属性;

@Autowired
我们可以使用@Autowired标注装配bean的方法或属性,例如set方法,构造方法,属性等,spring发现该注解时,会自动执行byType自动装配;
注意:
使用@Autowired时,系统中至少要有一个适合的bean能够装配,可以使用required属性来表示是否开启spring自动装配;
当有多个适合装配的bean时,要使用@Qualifier注解指定要装配的bean
@Inject
与@Autowired功能一样,但其没有required属性,所以必须要有一个合适的bean

@Value
装配string类型的值和into类型的值;@Value里面还可以使用表达式;
3、自动检测bean
<context:component-scan>元素扫描所有定义路径下的bean;
但是<context:component-scan>需要使用一些注解标注才能扫描到:

在定义了扫描bean会后还可以过滤一些组件的扫描:
使用<context:exclude-filter>元素
4、使用基于Java的配置减少配置文件
使用@Configuration注解的Java类

四、切面

切面能够帮助我们模块化横切关注点(一些通用功能),继承与 委托是常用的实现重用通用功能的技术,但是继承往往导致一个脆弱的对象体系,使用委托可能需要对委托对象进行复杂的调用,切面给我们提供了另一种选择;
在使用切面时,我们仍然在一个地方定义通用功能,但是我们可以通过声明的方式定义这个功能以何种方式在何处使用而无需修改影响的类;
横切关注点被模块化的类称为切面;
1、aop术语
通知
通知定义了切面时什么以及何时使用。除了描述切面要完成的工作,通知还解决了何时执行这个工作的问题;
spring切面可以定义5种类型的通知
(1)Before在方法调用之前调用通知
(2)After在方法完成之后调用通知,无论方法是否执行成功
(3)After-returning在方法执行成功之后调用通知
(4)After-throwing在方法抛出异常后调用通知
(5)Around通知包括了被通知的方法,在调用之前之后执行自定义的方法;
连接点
连接点是应用执行过程中插入切面的一个点,这个点可以使调用方法时、抛出异常时、甚至修改一个字段时;切面代码可以利用这些点插入到应用的正常流程之中,添加新的行为;
切点
通知定义了切面的“什么”“何时”,那么切点就定义了何处,切点的定义会匹配通知所要织入的一个或多个连接点,我们通常使用明确的类和方法名来定义这些切点或用正则表达式匹配定义的类和方法
切面
切面时通知和切点的结合,通知和切点共同定义了切面的全部内容;
引入
引入允许我们向现有的类添加新方法或属性
织入
织入是将切面应用到目标对象来创建新的代理对象的过程,切面在指定的连接点被织入到目标对象中,在目标对象的生命周期里有多个点可以进行织入:

2、spring aop支持
spring提供了4中aop支持
(1)基于代理的经典aop
(2)aspectj注解驱动的切面
(3)纯POJO切面
(4)注入式aspectj切面
前3种是基于代理的aop的变体,因此spring对aop的支持局限于对方法的拦截,如果aop需求超过了简单方法的拦截(比如构造器拦截或属性拦截),那么应该考虑用aspectj实现切面;
注意:
spring通知是Java编写的
spring在运行期通知对象
spring只支持方法连接点
3、在xml中声明切面


4、注解切面
@Aspect@Before@After等


五、spring模块

1、核心spring容器

容器是spring框架最核心的部分,它负责spring应用中的Bean的创建、配置和管理。在该模块中,你会发现spring的Bean工厂提供了依赖注入。在Bean工厂之上,你会发现几种spring应用上下文的实现。正如你所看到的,所有的spring模块都构建于核心容器之上。

2、spring的aop模块

在aop模块中,spring对切面编程提供了丰富的支持。

3、数据访问与集成

使用jdbc编写代码通常会导致大量的样式代码,spring的jdbc和dao封装了这些代码,使我们访问数据库变得简单了,还可以避免因为释放数据库资源失败而导致的问题。

4、web和远程调用

构建web应用的mvc框架和远程调用框架

5、测试模块

五、spring portfilio

1、spring web flow

建立于spring mvc框架之上并为基于流程的会话式web应用提供支持

2、spring web service

发布服务

3、spring security

安全切面

4、spring integration

与其他应用交互



发布了10 篇原创文章 · 获赞 18 · 访问量 5万+
展开阅读全文

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

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览