1、spring简介
Spring是一个分层的 full-stack(一站式)轻量级框架,以Ioc(Inversion of Control,控制反转)和AOP(Aspect Oriented Programming,面向切片编程)为内核,使用简单的JavaBean来完成以前只能由EJB(Enterprise Java Beans)完成的工作,取代了臃肿、低效的EJB。Spring致力于JavaEE应用各层的解决方案,是企业应用一站式开发很好的选择,在表现层它提供了Spring MVC以及整合Struts的功能,在业务逻辑层可以管理事务、记录日志等,在持久层可以整合Hibernate、Mybatis等框架。虽然Spring贯穿表现层、业务逻辑层、持久层,但Spring并不是要取代那些已有的优秀框架,而是可以高度开放的与其它优秀框架无缝整合。
- IOC简介
由系统中负责协调各对象的第三方组件,在创建对象的时候通过JavaBean属性(设值方法注入)或者构造函数(构造器注入),设定对象的依赖关系。【注意,是接收者依赖被接收者】。依赖注入会将所依赖的关系自动交给目标,而不是让它自己去获取依赖。也就是说,目标并不需要自己去创建其他类的对象,而是直接接收对象。并且,目标往往是与接口耦合,只要接收的对象实现了某个接口就可以。这样,就能由依赖注入随意更换接收的对象,进一步松耦合。依赖注入的另一个好处是:方便测试。紧耦合的目标难以测试,而通过依赖注入,可以让一个测试类实现耦合接口,然后不用修改代码,就可以让目标接收测试对象了。 - AOP简介
为促使软件系统实现关注点的分离的一项技术,将遍布应用各处的功能分离出来,形成可重用的组件。
横切关注点:
诸如日志、事务管理和安全这样的系统服务,经常融入到自身具有核心业务逻辑的组件中去,把这些系统服务称为横切关注点。
作用:
AOP将横切关注点模块化,在需要的组件中以声明的方式应用。组件只需要关注自身的业务代码,甚至根本不知道那些横切关注点的存在。这样,就避免了横切关注点的功能(代码或是方法调用)在各个组件中反复出现、使得组件变得混乱而复杂的缺陷,确保了POJO的简单性。
2、Spring的优点
- 基于POJO的轻量级和最小侵入性编程
Spring是一种非侵入式(no-invasive)框架,它可以使应用程序代码对框架的依赖最小化。 - 通过依赖注入(DI)和面向接口实现松耦合,方便解耦、简化开发
Spring是一个大工厂,可以将所有 对象的创建、依赖关系的维护 交给Spring容器管理,大大降低了组建之间的耦合。 - 支持AOP,基于切面和惯例进行声明式编程
允许将一些通用任务,比如安全、事务、日志等,进行集中式管理,从而提高程序的复用性。 - 支持声明式事务处理
通过配置就可以完成对事务的管理,无需手动编程。 - 方便整合其它优秀框架
Spring可以与大多数框架无缝整合。 - 测试方便
Spring支持Junit4,可通过注解测试程序,很方便。 - 降低了使用JavaEE API的难度
Spring对JavaEE开发中难用的一些API进行了封装,降低了这些API的使用难度。
3、spring获取对象
3.1 通过ApplicationContext获取bean对象
- 在applicationContext.xml中声明bean对象
1
2
3
4<bean name="demo" class="com.jing.Demo">
<!--bean对象属性初始化-->
<property name="属性名" value="初始化参数" />
</bean> - 通过WebApplicationContext获取bean对象
1
2WebApplicationContext webApplicationContext = WebApplicationContextUtils.getWebApplicationContext(request.getServletContext());
Demo demo = (Demo)webApplicationContext.getBean("demo");
3.2 通过配置和注解获取bean对象
在applicationContext.xml中声明bean对象
1
2
3
4
5
6
7
8
9
10<bean name="demo" class="com.jing.Demo">
<!--bean对象属性初始化-->
<property name="属性名" value="初始化参数" />
</bean>
<bean name="test" class="com.jing.Test">
<!--bean对象属性初始化-->
<property name="属性名" value="初始化参数" />
</bean>
```使用注解注入bean对象
1
2
3
4
5@Resource(name = "demo")
private Demo demo;
@Autowired
private Test test;
3.3 通过注解获取bean对象
- 在applicationContext.xml中配置bean对象组件扫描器,指定bean类所在包路径,声明包路径下所有bean。
1
2
3
4
5
6
7<context:component-scan base-package = "com.jing.entity"/>
@Component
public class Demo {}
@Component("test")
public class Test {} - 使用注解注入bean对象
1
2
3
4
5@Resource(name = "demo")
private Demo demo;
@Autowired
private Test test;
4、spring依赖包关系
4.1 spring核心jar包
Core模块:主要包含Spring框架基本的核心工具类,特别重要
Beans模块:包含访问配置文件、创建和管理bean以及进行Ioc/DI操作相关的所有类
Context模块:构建于Core和Beans模块基础之上,提供了一种类似于JNDI注册器的框架式的对象访问方法
Expression Languaga模块:提供了一个强大的表达式语言用于在运行时查询和操纵对象
4.2 spring数据库相关依赖
JDBC模块:jdbc支持
ORM模块:对象关系映射,集成orm框架,如Hibernate,IBatis
OXM模块:对象XML映射
JMS(Java Message Service)模块:java消息服务
Transaction模块:事务控制
4.3 springWeb相关依赖
spring-web模块:提供了基础的面向web的集成特性,如文件上传
spring-webmvc模块:包含了spring 的mvc实现
spring-websocket:为web应用提供的高效通信工具
spring-web-portlet模块:提供了用于Portlet环境和web-servlet模块的mvc实现
4.4 springAOP相关依赖
spring-aop:面向切面编程
spring-aspects :Aspects模块提供了对AspectJ(一个面向切面的框架,它展Java语言)的集成支持。
spring-instrument:提供一些类级的工具支持和ClassLoader级的实现,用服务器
spring-instrument-tomcat:针对tomcat的instrument实现
spring-messaging:用于构建基于消息的应用程序
4.5 spring测试相关依赖
spring-test:spring测试,提供junit与mock测试功能
spring-context-support:spring额外支持包,比如邮件服务、视图解析等
最后更新: 2020年10月14日 16:22
原始链接: http://genpe.top/2020/09/16/java%E5%BC%80%E5%8F%91/java%E6%A1%86%E6%9E%B6/spring%E7%AE%80%E4%BB%8B/