spring框架详细介绍,spring框架包含哪些内容
spring框架详细介绍,spring框架包含哪些内容详细介绍
本文目录一览: spring框架的简介
Spring:Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。
什么叫spring框架
Spring 框架是一个轻量级的 Java 开发框架,为应用开发提供平台。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一是分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供继承的框架。
Spring的主要特征
1)IOC(控制反转)或DI(依赖注入):明确定义组件的接口,独立开发各个组件,然后根据组件的依赖关系组装运行;即将创建及管理对象的权利交给Spring容器。Spring是一个轻型容器(light-weight Container),其核心是Bean工厂(Bean Factory),用以构造我们所需要的M(Model),能够让相互协作的软件组件保持松散耦合,降低了业务对象替换的复杂性,提高了组件之间的解耦。
2)AOP(面向切面编程):通过预编译方式和运行期动态代理实现在不修改源代码的情况下给程序动态统一添加功能的一种技术。即系统级的服务从代码中解耦出来。例如:将日志记录、性能统计、安全控制、事务处理、异常处理等代码从业务逻辑代码中划分出来,它允许你把遍布应用各处的功能分离出来形成可重用组件。
spring的介绍
Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。
快速切入:Spring框架核心概念总览
简而言之,Spring是企业级Java的开源开发框架。Spring框架的核心功能可用于开发任何java应用程序。Spring框架的核心模块如下:
任何由 Spring IoC 容器初始化的普通 Java 类都称为 Spring Bean。我们使用 spring 应用程序上下文来获取 Spring Bean 实例。 Spring IoC Container 管理 Spring Bean 范围/作用域的生命周期并在 bean 中注入任何所需的依赖项。
Spring bean的不同作用域:
对于任何 Java 应用程序,都有两个不同的作用域,称为单例(Singleton)和原型(Prototype)
主要有三种不同的作用域(或范围),即 请求(request)、会话(session)和全局会话(global-session) ,专门针对基于 Spring 的 Java Web 应用程序。
Singleton 是任何 bean 的默认作用域。这意味着每个 IoC 容器将创建单个 bean 实例。因此,单例 bean 不是线程安全的。
要设置 spring bean 的范围,我们可以在 标签中使用scope属性。 @scope 用于基于注释的 DI。
Spring 容器是 Spring 框架的核心。容器将创建对象,把它们连接在一起,配置它们,并管理它们从创建到销毁的完整生命周期。 Spring 容器使用依赖注入 (DI) 来管理组成应用程序的组件。
有两种不同类型的容器:
BeanFactory 容器 :这是 Spring 容器的核心。 org.springframework.beans.factory.BeanFactory 是一个接口,充当 IoC 容器,它实例化、配置和管理许多 bean。应用示例如下:
ApplicationContext 容器 :org.springframework.context.ApplicationContext 接口也充当 IoC 容器,但 ApplicationContext 接口建立在 BeanFactory 接口之上,以提供一些BeanFactory 额外的功能,例如与 Spring 的 AOP 的简单集成、消息资源处理(对于 I18N )、事件传播、Web 应用程序的应用层特定上下文(例如 WebApplicationContext)。所以使用 ApplicationContext 比使用 BeanFactory更好些。示例代码如下:
对于基于注解的依赖注入,使用@Autowired 注解。标有@Component/@Service/@Repository 等的类可以注入到标有@Autowired 的属性中
@Autowired 应用于:
1)基于构造器和setter的区别
2)context:annotation-config 和 context:component-scan 的区别
3)@Component、@Controller、@Repository & @Service 注解的区别
如果一个类用@Component/@Controller/@Service/@Repository 注解标记,那么Spring DI 容器可以在组件扫描机制期间识别该类。但是,对于服务层类使用@Service 是个好主意,并且@Controller 应该在spring mvc web 控制器中使用。 @Repository 用于将 DAO 导入 DI 容器。此外,任何未经检查的异常都将被转换为 Spring DataAccessException。
4)ViewResolver 与 MultipartResolver
ViewResolver 用于按名称解析视图。该接口由 InternalResourceViewResolver 实现 ;
MultipartResolver 用于处理 web 应用程序中的文件上传。
5)Spring MVC 中的验证
org.springframework.validation.Validator 接口支持 spring MVC 验证。验证表单的一些实用方法是 ValidationUtils 类中的 rejectIfEmptyOrWhitespace() 和 rejectIfEmpty()。示例如下:
Spring MVC 中验证表单的另一种方法是:
HandlerInterceptor 接口充当 spring MVC 拦截器。它在服务请求之前和之后拦截。如果您实现了 HandlerInterceptor 接口,则 preHandle()、postHandle() 和 afterCompletion() 是要覆盖的方法。但是,为了避免覆盖,您可以使用 HandlerInterceptorAdapter 类。
实现 ServletContextAware 和 ServletConfigAware 接口并覆盖以下方法:
数据库事务是一组被视为关联工作单元的操作。事务的主要原则是提交所有操作或在失败的情况下回滚所有操作。在交易中提交数据时,我们需要确保交易协议/称为 ACID(原子性-一致性-隔离-持久性)的属性:
全局事务 vs 本地事务:
脏读、幻读和不可重复读:
隔离与传播:
在旧版本的 spring 和 hibernate 集成中,需要 HibernateDAOSupport 和 HibernateTemplate。但是,较新版本的 Spring 不建议使用这两个类(这里仅做了解)。
通常我们从 HibernateDAOSupport 扩展我们的 DAO 类,并且 getHibernateTemplate() 方法将可用于Hibernate会话中的 CRUD 操作。由于这不是推荐的方法,所以我们在 DAO 中注入会话工厂(SessionFactory)。下面的代码片段会给你一些关于 HibernateDAOSupport 和 HibernateTemplate 的想法:
DAO 是一种设计模式,以最大限度地减少应用程序和后端之间的耦合;
ORM 处理如何将对象映射到对象关系数据库中,从而减少数据库和应用程序之间的耦合。
如果您在没有 DAO 的情况下使用 ORM,那么您的应用程序将变得依赖于 ORM,因此很难从一个 ORM(例如Hibernate)移动到另一个 ORM(例如 NoSQL)。
Spring DAO 是使用@Repository 注解实现的。 Spring 存储库扩展 JPARepository 并传递 JPA 实体及其主键。
最后,关于Spring框架相关的概念就简要介绍到这里,希望这能给你进入并深入Spring技术栈一个简单入口,而不会被Spring技术生态所惊吓(Spring现在都成软件开发技术的全家桶了,啥都有)——日进一步,锲而不舍,终将大成!
spring框架的介绍
Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性的角度而言,绝大部分Java应用都可以从Spring中受益。◆目的:解决企业应用开发的复杂性◆功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能◆范围:任何Java应用Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。
spring框架包含哪些内容
spring框架是一个轻量级的java开发框架,为应用开发提供平台。
spring主要框架包括7个模块spring core,spring aop,spring context,spring web,spring web mvc,spring orm,spring Da
spring 框架的介绍和好处?
分类: 电脑/网络 >> 软件
解析:
spring 框架介绍
它关注的领域是其他许多流行的Framework未曾关注的。Spring要提供的是一种管理你的业务对象的方法。
Spring既是全面的又是模块化的。Spring有分层的体系结构,这意味着你能选择仅仅使用它任何一个独立的部分,而它的架构又是内部一致。因此你能从你的学习中,得到最大的价值。例如,你可能选择仅仅使用Spring来简单化JDBC的使用,或用来管理所有的业务对象。
它的设计从一开始就是要帮助你编写易于测试的代码。Spring是使用测试驱动开发的工程的理想框架。
Spring不会给你的工程添加对其他的框架依赖。Spring也许称得上是个一站式解决方案,提供了一个典型应用所需要的大部分基础架构。它还涉及到了其他framework没有考虑到的内容。
尽管它仅仅是一个从2003年2月才开始的开源项目,但Spring有深厚的历史根基。这个开源工程是起源自我在2002年晚些时候出版的《Expert One-on-One J2EE设计与开发》书中的基础性代码。这本书展示了Spring背后的基础性架构思想。然而,对这个基础架构的概念可以追溯到2000年的早些时候,并且反映了我为一系列商业工程开发基础结构的成功经验。
Spring架构上的好处
在我们进入细节之前,让我们来看看Spring能够给工程带来的种种好处:
Spring能有效地组织你的中间层对象,不管你是否选择使用了EJB。如果你仅仅使用了Struts或其他为J2EE的 API特制的framework,Spring致力于解决剩下的问题。
Spring能消除在许多工程中常见的对Singleton的过多使用。根据我的经验,这是一个很大的问题,它降低了系统的可测试性和面向对象的程度。
通过一种在不同应用程序和项目间一致的方法来处理配置文件,Spring能消除各种各样自定义格式的属性文件的需要。曾经对某个类要寻找的是哪个魔法般的属性项或系统属性感到不解,为此不得不去读Javadoc甚至源编码?有了Spring,你仅仅需要看看类的JavaBean属性。Inversion of Control的使用(在下面讨论)帮助完成了这种简化。
通过把对接口编程而不是对类编程的代价几乎减少到没有,Spring能够促进养成好的编程习惯。
Spring被设计为让使用它创建的应用尽可能少的依赖于他的APIs。在Spring应用中的大多数业务对象没有依赖于Spring。
使用Spring构建的应用程序易于单元测试。
Spring能使EJB的使用成为一个实现选择,而不是应用架构的必然选择。你能选择用POJOs或local EJBs来实现业务接口,却不会影响调用代码。
Spring帮助你解决许多问题而无需使用EJB。Spring能提供一种EJB的替换物,它们适用于许多web应用。例如,Spring能使用AOP提供声明性事务管理而不通过EJB容器,如果你仅仅需要与单个数据库打交道,甚至不需要一个JTA实现。
Spring为数据存取提供了一个一致的框架,不论是使用的是JDBC还是O/R mappin *** 品(如Hibernate)。
Spring确实使你能通过最简单可行的解决办法来解决你的问题。而这是有有很大价值的。
Spring 5.0.0框架介绍_中文版_3.9
基于注解的配置提供了一种XML设置的可替代方式,它依赖于字节码元数据来连接组件,而不是用尖括号声明的方式。代替使用XML来描述bean连接,开发者通过将注解使用在相关的类,方法或字段声明中,将配置移动到了组件类本身的内部。正如在“Example: The RequiredAnnotationBeanPostProcessor”那节提到的那样,使用 BeanPostProcessor 与注解结合是扩展Spring IoC容器的的常见方法。例如,Spring 2.0引入了 @Required 注解来执行需要的属性的可能性。Spring 2.5使以同样地通用方法来驱动Spring的依赖注入变为可能。本质上来说, @Autowired 提供了如3.4.5小节描述的同样的能力。“Autowiring collaborators”但更细粒度的控制和更广的应用性。Spring 2.5也添加对JSR-250注解的支持,例如, @PostConstruct 和 @PreDestroy 。Spring 3.0添加了对JSR-330,包含在 javax.inject 包内的注解(Java的依赖注入)的支持,例如 @Inject 和 @Named 。关于这些注解的细节可以在相关的小节找到。
跟以前一样,你可以作为单独的bean定义来注册它们,但也可以通过在一个基于XML的Spring配置(注入包含上下文命名空间)中包含下面的标签来隐式的注册它们:
(隐式注册的后处理器包括 AutowiredAnnotationBeanPostProcessor , CommonAnnotationBeanPostProcessor , PersistenceAnnotationBeanPostProcessor 和前面提到的 RequiredAnnotationBeanPostProcessor 。)
@Required 注解应用到bean属性的setter方法上,例子如下:
这个注解仅仅是表明受影响的bean属性必须在配置时通过显式的bean定义或自动组装填充。如果受影响的bean属性没有填充,容器会抛出一个异常,这允许及早明确的失败,避免 NullPointerExceptions 或后面出现类似的情况。仍然建议你在bean类本身加入断言,例如,加入到初始化方法中。这样做可以强制这些需要的引用和值,甚至是你在容器外部使用这个类的时候。
你可以将 @Autowired 注解应用到构造函数上。
正如预料的那样,你也可以将 @Autowired 注解应用到“传统的”setter方法上:
你也可以应用注解到具有任何名字和/或多个参数的方法上:
你也可以应用 @Autowired 到字段上,甚至可以与构造函数混合用:
通过给带有数组的字段或方法添加 @Autowired 注解,也可以从 ApplicationContext 中提供一组特定类型的bean:
同样也可以应用到具有同一类型的集合上:
只要期望的key是 String ,那么类型化的Maps就可以自动组装。Map的值将包含所有期望类型的beans,key将包含对应的bean名字:
默认情况下,当没有候选beans可获得时,自动组装会失败;默认的行为是将注解的方法,构造函数和字段看作指明了需要的依赖。这个行为也可以通过下面的方式去改变。
你也可以对那些已知的具有可解析依赖的接口使用 @Autowired : BeanFactory , ApplicationContext , Environment , ResourceLoader , ApplicationEventPublisher 和 MessageSource 。这些接口和它们的扩展接口,例如 ConfigurableApplicationContext 或 ResourcePatternResolver ,可以自动解析,不需要特别的设置。
因为根据类型的自动装配可能会导致多个候选目标,所以在选择过程中进行更多的控制经常是有必要的。一种方式通过Spring的 @Primary 注解来完成。当有个多个候选bean要组装到一个单值的依赖时, @Primary 表明指定的bean应该具有更高的优先级。如果确定一个'primary' bean位于候选目标中间,它将是那个自动装配的值。
假设我们具有如下配置,将 firstMovieCatalog 定义为主要的 MovieCatalog 。
根据这样的配置,下面的 MovieRecommender 将用 firstMovieCatalog 进行自动装配。
对应的bean定义如下:
当有多个实例需要确定一个主要的候选对象时, @Primary 是一种按类型自动装配的有效方式。当需要在选择过程中进行更多的控制时,可以使用Spring的 @Qualifier 注解。为了给每个选择一个特定的bean,你可以将限定符的值与特定的参数联系在一起,减少类型匹配集合。在最简单的情况下,这是一个纯描述性值:
@Qualifier 注解也可以指定单个构造函数参数或方法参数:
对应的bean定义如下。限定符值为"main"的bean被组装到有相同值的构造函数参数中。
对于回退匹配,bean名字被认为是默认的限定符值。因此你可以定义一个id为 main 的bean来代替内嵌的限定符元素,会有同样的匹配结果。然而,尽管你可以使用这个约定根据名字引用特定的beans,但是 @Autowired 从根本上来讲是使用可选的语义限定符来进行类型驱动注入的。这意味着限定符的值,即使回退到bean名称,总是缩小语义类型匹配的集合;它们没有从语义上将一个引用表达为一个唯一的bean id。好的限定符值是"main"或"EMEA"或"persistent",表达一个特定组件的性质,这个组件是独立于bean id 的,即使前面例子中像这个bean一样的匿名bean会自动生成id。
正如前面讨论的那样,限定符也可以应用到类型结合上,例如, Set
。在这个例子中,根据声明的限定符匹配的所有beans作为一个集合进行注入。这意味着限定符不必是唯一的;它们只是构成过滤标准。例如,你可以定义多个具有同样限定符值"action"的 MovieCatalog ,所有的这些都将注入到带有注解 @Qualifier("action") 的 Set
中。
你可以创建自己的定制限定符注解。简单定义一个注解,在你自己的定义中提供 @Qualifier 注解:
然后你可以在自动装配的字段和参数上提供定制的限定符:
接下来,提供候选bean定义的信息。你可以添加
标记作为
标记的子元素,然后指定匹配你的定制限定符注解的类型和值。类型用来匹配注解的全限定类名称。或者,如果没有名称冲突的风险,为了方便,你可以使用简写的类名称。下面的例子证实了这些方法。
在3.10小节,“类路径扫描和管理组件”中,你将看到一个基于注解的替代方法,在XML中提供限定符元数据。特别地,看3.10.8小节,“用注解提供限定符元数据”。
在某些情况下,使用没有值的注解就是足够的。当注解为了通用的目的时,这是非常有用的,可以应用到跨几个不同类型的依赖上。例如,当网络不可用时,你可以提供一个要搜索的离线目录。首先定义一个简单的注解:
然后将注解添加到要自动装配的字段或属性上:
现在bean定义只需要一个限定符类型:
你也可以定义接收命名属性之外的定制限定符注解或代替简单的值属性。如果要注入的字段或参数指定了多个属性值,bean定义必须匹配所有的属性值才会被认为是一个可自动装配的候选目标。作为一个例子,考虑下面的注解定义:
这种情况下 Format 是枚举类型:
要自动装配的字段使用定制限定符进行注解,并且包含了两个属性值: genre 和 format 。
最后,bean定义应该包含匹配的限定符值。这个例子也证实了bean元属性可以用来代替
子元素。如果可获得
,它和它的属性优先级更高,如果当前没有限定符,自动装配机制会将
内的值作为备用,正如下面的例子中的最后两个bean定义。
除了 @Qualifier 注解外,也可以使用Java的泛型类型作为限定符的一种暗示方式。例如,假设你有如下配置:
假设上面的beans实现了一个泛型接口,例如, Store
和 Store
,你可以 @Autowire Store 接口,泛型将作为限定符使用:
当自动装配 Lists , Maps 和 Arrays 时,也会应用泛型限定符:
CustomAutowireConfigurer 是一个能使你注册自己的定制限定符注解类型的 BeanFactoryPostProcessor ,即使它们不使用Spring的 @Qualifier 注解进行注解。
AutowireCandidateResolver 通过下面的方式决定自动装配的候选目标:
当多个beans符合条件成为自动装配的候选目标时,"primary" bean的决定如下:如果在候选目标中某个确定的bean中的 primary 特性被设为 true ,它将被选为目标bean。
Spring也支持使用JSR-250 @Resource 对字段或bean属性setter方法进行注入。这是在Java EE 5和6中的一种通用模式,例如在JSF 1.2管理的beans或JAX-WS 2.0的端点。Spring对它管理的对象也支持这种模式。
@Resource 采用名字属性,默认情况下Spring将名字值作为要注入的bean的名字。换句话说,它遵循 by-name 语义,下面的例子证实了这一点:
如果没有显式的指定名字,默认名字从字段名或setter方法中取得。在字段情况下,它采用字段名称;在setter方法情况下,它采用bean的属性名。因此下面的例子将名字为 movieFinder 的bean注入到它的setter方法中:
在 @Resource 特有的没有显式名字指定的情况下,类似于 @Autowired , @Resource 会进行主要的匹配类型来代替指定名字的bean并解析已知的可解析依赖: BeanFactory , ApplicationContext , ResourceLoader , ApplicationEventPublisher 和 MessageSource 接口。
因此在下面的例子中, customerPreferenceDao 字段首先查找名字为 customerPreferenceDao 的bean,然后回退到主要的类型为 CustomerPreferenceDao 的类型匹配。"context"字段会注入基于已知的可解析依赖类型 ApplicationContext 。
CommonAnnotationBeanPostProcessor 不仅识别 @Resource 注解,而且识别JSR-250生命周期注解。在Spring 2.5引入了对这些注解的支持,也提供了在初始化回调函数和销毁回调函数中描述的那些注解的一种可替代方式。假设 CommonAnnotationBeanPostProcessor 在Spring的 ApplicationContext 中注册,执行这些注解的方法在生命周期的同一点被调用,作为对应的Spring生命周期接口方法或显式声明的回调方法。在下面的例子中,缓存会预先放置接近初始化之前,并在销毁之前清除。
什么是spring框架?使用spring框架的好处是什么
一.概念:
1. spring是开源的轻量级框架
2. spring核心主要两部分:
(1)aop:面向切面编程,扩展功能不是修改源代码实现
(2)ioc:控制反转,
- 比如有一个类,在类里面有方法(不是静态的方法),调用类里面的方法,创建类的对象,使用对象调用方法,创建类对象的过程,需要new出来对象
- 把对象的创建不是通过new方式实现,而是交给spring配置创建类对象
二.好处
我用通俗的话给你解释把。
首先你不用框架不是每次创建对象都要用关键字“new”呢?对吧。有了spring配置就不用new了,直接拿。举个例子:假如你吃饭,每次你要吃饭时都要自己准备碗和筷子,每次都要自己准备,用了框架后,再 吃饭你只要吃就行了,就不用准备碗和筷子了因为spring已经给你准备好了。这样是不是很方便。
spring主要就是不用你自己创建对象,都配置在配置文件中。如果你写好一个项目,你再a类中创建了b类的方法,c类也创建了b类的方法,如果那天要改b类的类名,你就要在a和c中都改,如果有100个类都用了b类呢?那你不是要改死哦!!!
如果用了spring,你只要修改配置文件一个位置就好了,是不是很方便维护呢。
所以,小项目用不着spring框架。手打好累。。。