Spring框架的基本思想就是IOC/DI
Spring就是一个IOC容器
2.spring的最大作用ioc/di,将类与类的依赖关系写在配置文件中,程序运行时根据配置文件动态加载依赖的类,降低的类与类之间的藕合度。
spring让对象与对象之间的关系都通过配置类说明管理,Spring根据这些配置内部通过反射去动态的组装对象
要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。
它的原理是在applicationContext.xml加入bean标签,在bean标签中通过class属性说明具体类名、通过property标签说明该类的属性名、通过constructor-args说明构造子的参数。
其一切都是反射,当通过applicationContext.getBean("id名称")得到一个类实例时,就是以bean标签的类名、属性名、构造子的参数为准,通过反射实例对象,唤起对象的set方法设置属性值、通过newInstance实例化得到对象。
正因为spring一切都是反射,反射比直接调用的处理速度慢,所以这也是spring的一个问题。
spring 第二大作用就是aop,其机理来自于代理模式,代理模式有三个角色分别是通用接口、代理、真实对象代理、真实对象实现的是同一接口,将真实对象作为代理的一个属性,向客户端公开的是代理,当客户端调用代理的方法时,代理找到真实对象,调用真实对象方法,在调用之前之后提供相关的服务,如事务、安全、日志。
其名称分别是代理、真实对象、装备、关切点、连接点。
动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射。反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟Spring的配置文件来动态的创建对象,和调用对象里的方法的 。
Spring里用的最经典的一个设计模式就是:模板方法模式。
3.AOP(Aspect-Oriented Programming)是面向切面编程,可以为某一类对象进行监督和控制(也就是在调用这类对象的具体方法的前后去调用你指定的模块)从而达到对一个模块扩充的功能。
这些都是通过配置类达到的。AOP的主要原理:动态代理
代理的两种方式:
静态代理:
针对每个具体类分别编写代理类;
针对一个接口编写一个代理类;
动态代理:
针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类
事务处理:
在以往的JDBCTemplate中事务提交成功,异常处理都是通过Try/Catch 来完成,而在Spring中。Spring容器集成了TransactionTemplate,她封装了所有对事务处理的功能,包括异常时事务回滚,操作成功时数据提交等复杂业务功能。这都是由Spring容器来管理,大大减少了程序员的代码量,也对事务有了很好的管理控制。
1.<constant name="struts.objectFactory" value="spring" />
Spring的官方定义是:一个轻量级的IoC和Aop容器框架,它使用了一种叫做依赖注入的技术。
所谓依赖注入,就是指将创建对象以及协议依赖对象之间合作的责任从对象自身中转移到“工厂”中去,这个“工厂”通常由IoC容器提供。
Struts2与Spring的集成要用到Spring插件包,这个包是同 Struts2一起发布的。Spring插件是通过覆盖Struts2的ObjectFactory来增强核心框架对象的创建 。当创建一个对象的时候,它会用Struts2配置文件中的class属性去和Spring配置文件中的id属性进行关联,如果能找到则由Spring创建,否则由Struts2框架自身创建,然后由Spring来装配。 Spring插件具体有如下几个作用:
1. 允许spring来创建Action、Interceptror和Result
2. 由Struts创建的对象能够被Spring装配
3. 提供了2个拦截器来自动装配action,如果没有使用Spring ObjectFactory的话
这里要注意的是,我们不必在Spring中去注册action,尽管我们可以这么去做,通常Struts框架会自动的从action mapping中创建action对象。
当指定struts.objectFactory为spring时,struts2框架就会把bean转发给spring来创建,装配,注入。但是bean创建完成之后,还是由struts容器来管理其生命周期。.
需要注意的一个地方:Spring中的缺省作用域是Singleton作用域。而往往Action属于有状态的bean,应该使用prototype作用域。如果忽略这个细节,在我们方便实用set,get方法处理数据的时候,可能会有线程安全 上的风险。
这个属性用于说明Struts2的 对象池创建工厂,Struts2也有自己的对象池,就像Spring那样,在配置文件中你可以引用对象池中的对象,你可以借助于Spring中的对象池,当想要得到Spring中的对象池时,申明struts.objectFactory为Spring的对象池构建工厂
2.
切面aspect : 把横切的关注点(如安全性检查方法)抽取出来,将其放到一个类中,这个类就叫切面
通知advice : 是对横切关注点的实现,如checkSecurity()方法
切入点pointCut : 安全性检查的范围,即由切入点表达式判断在哪个方法(连接点Joinpoint) 上执行checkSecurity()
明明白白AOP(傻瓜也会心领神会!)
http://stamen.iteye.com/blog/1512388
3、Spring两种容器:
BeanFactory容器、应用上下文ApplicationContext
Bean工厂延迟载入所有的Bean,直到getBean()方法被调用时bean才被创建。
上下文则是在启动时预载入所有的单实例Bean,确保当你需要的时候它已经准备好了,不需要等待他们被创建 。
Spring对接口实现类通过Dynamic Proxy实现AOP,而对于没有实现任何接口的类 通过CGLIB实现AOP机制
对于没有实现接口的类 生成字节增强码的代理 其实就是生成真正实现类的子类
相关推荐
为了深入学习Spring,你可以参考官方文档、在线教程、书籍,如《Spring in Action》等,以及参与开源社区,如Stack Overflow、GitHub等,积累实战经验。 总的来说,Spring框架是Java开发的强大工具,理解和掌握其...
Spring学习笔记总结 Spring是一个基于Java的框架,它提供了一种简洁、灵活的方式来构建企业级应用程序。在这个笔记中,我们将总结Spring的主要概念和技术,包括IOC、AOP、MVC、Struts2和Hibernate的集成。 IOC...
spring学习笔记
除此之外,官方文档、GitHub仓库、Stack Overflow和各种在线课程都是深入学习Spring Security的好资源。 总的来说,Spring Security是一个功能强大且灵活的安全框架,它的核心机制包括用户认证、权限授权,以及丰富...
### Spring Security核心概念与实践详解 #### Spring Security概述 在深入了解Spring Security之前,我们先回顾一下没有Spring Security的权限管理场景。在传统架构中,权限验证逻辑往往与业务逻辑紧密交织,导致...
课程学习时候的笔记总结,这里面没有代码部分,全是知识点的总结,方便大家去面试回答
以上就是Spring学习笔记的初步概述,涵盖了Spring的基本架构、配置文件的创建和加载,以及依赖注入的主要方式。随着学习的深入,还可以涉及AOP、Spring MVC、Spring Boot、Spring Data等更高级的主题,从而更好地...
Spring2的学习主要涉及以下几个关键概念和技术: 1. **IOC (Inversion of Control) 控制反转**: 控制反转是指应用程序不再直接创建和管理依赖对象,而是将这种责任交给一个外部容器,也就是Spring框架。通过这种...
【狂神说】Spring PDF学习总结笔记主要涵盖了Spring框架的核心概念、优点、组成部分以及相关扩展。Spring是一个由Rod Johnson创建的开源框架,旨在简化企业级应用开发的复杂性,它结合了众多现有技术,如SSH(Struct...
在这个学习记录总结中,我们将深入理解Spring MVC的核心概念、主要组件以及其工作流程。 1. Spring MVC 概述 Spring MVC 是Spring框架的一部分,它基于Spring IoC(Inversion of Control,控制反转)容器,简化了...
这个"spring学习资料,精心总结,不可错过,速领!.zip"压缩包显然是为那些想要深入理解Spring框架的人准备的。以下是压缩包内可能包含的一些关键知识点,以及它们在实际开发中的应用和重要性: 1. **IoC...
SpringSecurity是Java开发中用于构建安全Web应用的框架,它提供了强大的身份验证、...在学习过程中,分析提供的源代码和示例将有助于深入理解SpringSecurity的工作原理,并能帮助你在实际项目中有效地应用这些知识。
### Spring学习总结(不含整合其他框架) #### 一、Spring框架简介 **Spring** 是一个开源框架,旨在简化企业级应用开发。通过使用Spring,即使是简单的JavaBean也可以实现原本只有EJB才能完成的功能。Spring的...
通过学习这些内容,学生可以增强对英语词汇的理解,提高翻译能力,并能更好地描述和表达自己对不同季节的感受。同时,这也可以帮助他们了解和体验不同的文化习俗,如植树节、春季活动以及各国对四季的不同体验。
**Spring框架概述** Spring是一个开源的Java平台,它主要为构建企业级应用提供全面的框架支持。...通过阅读提供的文档、教程和知识点总结,可以系统地学习和理解Spring,从而提升自己的开发能力。
【Spring Security 学习总结】 Spring Security 是一个强大的和高度可定制的身份验证和访问控制框架,用于保护基于 Java 的应用程序。本学习总结文档主要针对初学者,旨在剖析一个不安全的应用程序并阐述如何通过 ...