Spring初识
spring框架的组成模块
模块介绍:
1,Data access/Integration(数据访问/集成)
JDBC:提供一个JDBC的朝向曾,大幅度减少开发过程中对数据库操作的编码。
ORM:对流行对象关系映射的API。包括JPA、JDO、Hibernate 和 iBatis 提供了的集成层。
OXM:提供一个支持对象/XML映射的抽象层,如JAXB、Castor、XMLBeans、JiBX和XStream
JMS:指Java消息服务,包含的功能为生产和消费的信息。
Transactions事务模块:支持编程和声明式事务管理实现特殊接口类.
2,Web模块
Web:提供了基本的Web开发集成特性,如:文件上传功能,select监听器的Ioc容器初始化以及Web应用上下文。
Servlet:包括SpringMVC实现web应用程序。
Struts:包含支持类内的Spring应用程序,集成了经典的Struts Web层。
Portlet:提供了在Portlet环境中使用MVC的实现。类似Web-Servlet模块功能。
3,Core Container(核心容器)
Beans:提供BeanFactory,时工厂模式的经典实现,Spring将管理对象成为Bean,
Core核心:提供Spring框架的基本组成部分,包括Ioc和DI功能。
Context上下文模块:建立在核心和Bean模块基础之上。他是访问dinginess和配置任何对象的媒介。
ApplicationContext接口时上下文模块的焦点。
ExpressionLanguage:是运行时查询和操作对象的图的强大的表达式语言。
4,其他模块
AOP:提供面向切面编程实现,允许定义方法拦截器和切入点,将代码按照功能进行分离,以降低耦合性。
Aspects:提供与AspectJ的集成,是一个功能强大且成熟的面向切面编程(AOP)框架。
Instrumentation:提供了类工具的支持和类加载器的实现,可以在特定的应用服务器中使用。
Test:支持Spring组件,使用JUnit或TestNG框架测试。
Spring框架依赖jar包
1,spring-core-5.2.2.RELEASE.jar:核心jar包,是其他组件的基本核心,包含Spring框架的基本核心工具类。
2,spring-beans-5.2.2.RELEASE.jar:包含spring框架管理Bean和配置文件的基本功能。
3,spring-context-5.2.2.RELEASE.jar:Spring框架核心包的扩展包,包含大量工具类。
4,spring-expression-5.2.2.RELEASE.jar:Spring框架中一个强大的表达式解析语言,支持在运行时动态的解析表达式给对象赋值等功能。
核心概念
IoC—Inversion of Control
IoC—控制反转,把对资源的控制权反转过来。是一种理念。
定义:IoC 是指在程序开发中,实例的创建不再由调用者管理,而是由 Spring 容器创建。Spring 容器会负责控制程序之间的关系,而不是由程序代码直接控制,因此,控制权由程序代码转移到了 Spring 容器中,控制权发生了反转,这就是 Spring 的 IoC 思想。
Dependency Injection(DI)—依赖注入
其表示将依赖的对象注入需要的类中,是IoC设计思想的一种具体实现方式。
Spring提供了两种IoC容器
BeanFactory
BeanFactory是基础类型的Ioc容器,它由org.springframework.beans.facytory.BeanFactory 接口定义。BeanFactory是一个管理bean的工厂,负责初始化各种bean,并调用他们的声明周期方法
BeanFactory接口由多个实现类,最常见的是XmlBeanFactory—根据XML配置文件种的定义装配Bean的。
ApplicationContext
ApplicationContext是BeanFactory的子接口,已成为应用上下文,不仅提供了BeanFactory的所有功能,还添加了对i18n(国际化),资源访问,时间传播等方面的支持。
其常用的两个实现类:
1)ClassPathXmlApplicationContext
从类路径ClassPath种寻找指定的XML配置文件,找到并装在完成ApplicationContext的实例化工作。
ApplicationContext context=new ClassPathXmlApplicationContext(String configLocation);
//configLocation参数用于指定spring配置文件的名称和位置
2)FileSystemXmlApplicationContext
该类从指定的文件系统路径中寻找指定的xml配置文件,找到并装在完成ApplicationContext的实例化工作。
ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String configLocation);
//FileSystemXmlApplicationContext 不再从类路径中读取配置文件,而是通过参数指定配置文件的位置,它可以获取类路径之外的资源
注意
1,BeanFactory 和 ApplicationContext 都是通过 XML 配置文件加载 Bean 的。
2,二者的主要区别在于,如果 Bean 的某一个属性没有注入,则使用 BeanFacotry 加载后,在第一次调用 getBean() 方法时会抛出异常,而 ApplicationContext 则在初始化时自检,这样有利于检查所依赖的属性是否注入。
AOP–aspect Oriented Programming
-----面向切面编程,即AOP把对象或固定的流程切开,找到其中的公共行为,并将其进行提取同意处理的一种思想。其依赖动态代理实现。
一些基本概念
1,Aspect(切面):一个模块化的横切逻辑(或称横切关注点),可能会横切多个对象。
2,Advice(增强处理):切面在某个特定连接点上执行的代码逻辑。
3,join Point(连接点):程序执行中的某个具体的执行点。
4,pointcut(切入点):对连接点的特征进行描述,可以使用正则表达式,增强处理和一个切入点表达式相关联,并在与这个切入点匹配的某个连接点上运行。——入口
5,TargetObject(目标对象):被一个或多个切面增强的对象。
6,AOP proxy(AOP代理):由一个AOP框架所创建的对象,实现执行增强处理方法等功能。
7,Weaving(织入):将增强处理连接到应用程序中的类型或对象上的过程。
8,增强处理类型:前置增强,后置增强,环绕增强,抛出异常增强,最终增强。
使用AOP方式进行处理代码
/**
* 顾客类
*/
public class Client {
public void eat(){
System.out.println("吃饭----吃完了");
}
}
/**
* 服务员类
*/
public class Waiter {
public void beforeWaiter(){
System.out.println("请点餐");
}
public void afterWaiter(){
System.out.println("请买单");
}
}
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.2.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.2.xsd">
<!--目标bean-->
<bean id="client" class="com.company.aop.Client" />
<!--切面bean代理-->
<bean id="waiter" class="com.company.aop.Waiter"/>
<!-- 配置切面-->
<aop:config>
<!-- 定义切入点,从谁的哪个方法进入-->
<!-- 从eat方法进入-->
<aop:pointcut id="pointcut" expression="execution(public void eat())"/>
<!-- 引用包含增强方法bean //引用代理类-->
<aop:aspect ref="waiter">
<!-- 前置增强 //引用代理类中的方法 放置pointcut切入点之前-->
<aop:before method="beforeWaiter" pointcut-ref="pointcut"/>
<!-- 后置增强 //引用代理类中的方法 放置pointcut切入点之后-->
<aop:after-returning method="afterWaiter" pointcut-ref="pointcut"/>
</aop:aspect>
</aop:config>
</beans>
//测试类
@Test
public void Test3(){
ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
Client client=(Client)context.getBean("client");
client.eat();
}
解释配置文件中一些标签的作用及用法:
1,与AOP相关的配置都放在aop:config标签中。
2,aop:pointcut表示切入点,id属性为切入点的名称,expression属性为该切入点的表达式,execution是切入点的只是符,其中放置表达式,如下:
1)public * 方法名(参数): * 表示匹配所有类型的返回值。
2)public void *(参数) : * 表示匹配所有方法名。
3)public void 方法名(…): …表示匹配任意参数个数和类型。
4)* com.service. * . * (…) :匹配com.service包下所有类的所有方法。
5)* com.service. .* . * (…) :匹配com.service包及其子包下所有类的所有方法。
3,aop:aspect引用增强的Bean,ref属性指定增强bean的名称。
4,把增强处理插入切入点的过程成为织入。