快速切入: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 妗嗘灦鐨勬牳蹇銆傚鍣ㄥ皢鍒涘缓瀵硅薄锛屾妸瀹冧滑杩炴帴鍦ㄤ竴璧凤紝閰嶇疆瀹冧滑锛屽苟绠$悊瀹冧滑浠庡垱寤哄埌閿姣佺殑瀹屾暣鐢熷懡鍛ㄦ湡銆 Spring 瀹瑰櫒浣跨敤渚濊禆娉ㄥ叆 (DI) 鏉ョ鐞嗙粍鎴愬簲鐢ㄧ▼搴忕殑缁勪欢銆傛湁涓ょ涓嶅悓绫诲瀷鐨勫鍣細BeanFactory 瀹瑰櫒 锛氳繖鏄 Spring 瀹瑰櫒鐨勬牳蹇冦 org.springframework.beans.factory.BeanFactory 鏄竴...
  • spring鏍稿績鐨勭煡璇
    绛旓細IOC锛圛nversion of Control锛夋帶鍒跺弽杞細瀹冩槸Spring鐨勬牳蹇冿紝鏄竴绉嶅皢缁勪欢渚濊禆鍏崇郴鐨勫垱寤哄拰绠$悊缃簬绋嬪簭澶栭儴鐨勬妧鏈銆傛牴鎹垜涓汉鐨勪娇鐢ㄦ槸杩欎箞鐞嗚В鐨勶細濡傛灉鐢↖OC,涓涓被A涓鏋滆鐢ㄥ埌鍏朵粬绫籅鐨勫姛鑳斤紝蹇呴』鍦ㄦ湰绫讳腑鍐欏叆B锛屽悓鏃跺0鏄庡璞 b= new B()锛岃皟鐢ㄦ柟娉曪紱鑰屽鏋滀娇鐢↖OC鍚庯紝杩欓噷鐨刵ew B()灏变笉蹇呭湪杩...
  • Spring 鏍稿績绫讳粙缁
    绛旓細DefaultListableBeanFactory 鏄暣涓 Bean 鍔犺浇鐨鏍稿績閮ㄥ垎锛屾槸 Spring 娉ㄥ唽鍙婂姞杞 Bean 鐨勯粯璁ゅ疄鐜帮紝XmlBeanFactory 缁ф壙鑷 DefaultListableBeanFactory 锛孹mlBeanFactory 鑷畾涔変簡 XML 璇诲彇鍣 XmlBeanDefinitionReader,瀹炵幇浜嗕釜鎬у寲鐨 BeanDefinitionReader 璇诲彇銆侱efaultListableBeanFactory 缁ф壙鍏崇郴锛-AliasRegistry: ...
  • Spring鐨勫垏鍏鐐(涓 闈欐丳ointcut)
    绛旓細package springframework aop; public interface ClassFilter { boolean matches(Class clazz); ClassFilter TRUE = TrueClassFilter INSTANCE; } 鍏朵腑matches鏂规硶鐢ㄤ簬绫荤殑鍖归厤 鍙傛暟clazz鏄渶瑕佸尮閰嶇殑鐩爣绫 鍖归厤鎴愬姛鍒欒繑鍥瀟rue JdkRegexpMethodPointcut 浣跨敤JDK涓畾涔夌殑姝e垯琛ㄨ揪寮忓鏂规硶鍚嶈繘琛屽尮...
  • Spring涓瑼dvisors绠浠
    绛旓細Spring涓殑Advisor锛氭繁鍏ョ悊瑙i潰鍚戝垏闈㈢紪绋嬬殑鏍稿績缁勪欢 鍦Spring鐨AOP妗嗘灦涓紝advisor杩欎竴姒傚康璧风潃鍏抽敭浣滅敤锛屽畠鏄粠鏇翠负鎶借薄鐨勫垏闈㈢紪绋嬫蹇典腑鎻愮偧鍑烘潵鐨勭嫭鐗瑰厓绱犮傚湪AspectJ涓紝铏界劧娌℃湁鐩存帴瀵瑰簲鐨勬湳璇紝advisor鍙互琚浣滀竴涓皬鍨嬬殑銆佽嚜鍖呭惈鐨勫垏闈紝瀹冧粎鎵胯浇涓涓猘dvice閫氱煡锛岃繖涓氱煡閫氬父鐢盨pring Bean鐨勫舰寮忓疄鐜...
  • 璇磋涓汉瀵筍truts,Spring,Hibernate鍒嗗埆鏄粈涔堢殑鐞嗚В?(鍏朵腑瑕佸寘鎷琒truts...
    绛旓細Spring妗嗘灦涓昏鏄敤瀹冪殑涓や釜鍔熻兘锛1锛塈oC锛堝弽杞帶鍒讹級鍔熻兘锛屽皢浠g爜涓殑JavaBean缁熶竴绠$悊锛屽疄鐜拌嚜鍔ㄦ敞鍏ワ紝鍑忓皯浠g爜鑰﹀悎銆傦紙鐢ㄥソ杩欐柟闈㈢殑鍔熻兘锛岄渶瑕佷綘寰堝ソ鐞嗚В璁捐妯″紡鏂归潰鐨勪笢瑗匡級銆 2锛夐潰鍚戝垏闈(AOP)鍔熻兘锛岃兘灏嗕竴閮ㄥ垎閫氱敤浠g爜鍒囧叆鍒扮▼搴忎腑锛屼緥濡傛棩蹇楄褰曪紝浜嬪姟绠$悊閲岀敤鐨勭壒鍒銆係pring鍏跺疄鍙互鐞嗚В涓轰竴涓...
  • Spring AOP鐨勪竴浜涙蹇
    绛旓細鍒囧叆鐐癸紙Pointcut锛 鍖归厤杩炴帴鐐癸紙Joinpoint锛夌殑鏂█ 閫氱煡鍜屼竴涓垏鍏ョ偣琛ㄨ揪寮忓叧鑱 骞跺湪婊¤冻杩欎釜鍒囧叆鐐圭殑杩炴帴鐐逛笂杩愯锛堜緥濡 褰撴墽琛屾煇涓壒瀹氬悕绉扮殑鏂规硶鏃讹級 鍒囧叆鐐硅〃杈惧紡濡備綍鍜岃繛鎺ョ偣鍖归厤鏄疉OP鐨鏍稿績 Spring缂虹渷浣跨敤AspectJ鍒囧叆鐐硅娉 寮曞叆锛圛ntroduction锛 锛堜篃琚О涓哄唴閮ㄧ被鍨嬪0鏄庯紙inter type declaration锛夛級 ...
  • 浠涔堟槸spring 鏈鏂伴潰璇曢绛旀
    绛旓細杩欐槸鍩烘湰鐨凷pring妯″潡,鎻愪緵spring 妗嗘灦鐨勫熀纭鍔熻兘,BeanFactory 鏄 浠讳綍浠pring涓哄熀纭鐨勫簲鐢ㄧ殑鏍稿績銆Spring 妗嗘灦寤虹珛鍦ㄦ妯″潡涔嬩笂,瀹冧娇Spring鎴愪负涓涓鍣ㄣ5. BeanFactory 鈥 BeanFactory 瀹炵幇涓句緥銆侭ean 宸ュ巶鏄伐鍘傛ā寮忕殑涓涓疄鐜,鎻愪緵浜嗘帶鍒跺弽杞姛鑳,鐢ㄦ潵鎶婂簲鐢ㄧ殑閰嶇疆鍜屼緷璧栦粠姝g湡鐨勫簲鐢ㄤ唬鐮佷腑鍒嗙銆傛渶甯哥敤鐨凚eanFactory...
  • spring鍒囧叆鐐硅〃杈惧紡鏈夊摢浜
    绛旓細Pointcut鍙互鏈変笅鍒楁柟寮忔潵瀹氫箟鎴栬呴氳繃&& || 鍜!鐨勬柟寮忚繘琛岀粍鍚.args()args()execution()this()target()target()within()within()annotation 鍏朵腑execution 鏄敤鐨勬渶澶氱殑,鍏舵牸寮忎负:execution(modifiers-pattern? ret-type-pattern declaring-type-pattern? name-pattern(param-pattern)throws-pattern?)retur...
  • spring涓殑aop 鏄庝箞闈㈠悜鍒囬潰缂栫▼鐨
    绛旓細1 瀹屾垚鍏辨у姛鑳藉拰鏍稿績涓氬姟鍔熻兘鐨勮В鑰﹀悎 2 鎻愪緵鍏辨у姛鑳界殑澶嶇敤鎬с 2.3springAOP鐨勬蹇 Aspect鍒囬潰:灏佽鍏辨у姛鑳界殑(澧炲己鍔熻兘鐨)绫 Advice閫氳繃:鍒囬潰绫讳腑灏佽鐨勫寮哄姛鑳界殑鏂规硶銆 PointCut:鍒囧叆鐐,鏄竴涓泦鍚堢殑姒傚康,璇ラ泦鍚堢殑琛ㄨ揪浣跨敤涓涓鍒欒〃杈惧紡琛ㄨ揪 鎵鏈夋牳蹇冧笟鍔″璞$殑鎵鏈夋柟娉曠殑鍓嶅悗(浜嬪姟澶勭悊AOP鍏稿瀷鐨勫簲鐢) Join...
  • 扩展阅读:java spring框架 入门 ... konoha spring下载 ... spring professional ... spring festival ... web前端三大主流框架 ... spring boot三层框架 ... springblooms没有了 ... springblooms合集下载 ... spring框架教程 ...

    本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网