spring三大核心

如果将spring类比java,java最核心,最基础的概念就是object了。java中,所有的操作都是针对object的(基础类型除外),java中,一切皆对象,一切都是object。类比下来,spring中最基础的概念是bean。在spring中,所以的类都可以认为是一个bean。在spring中的所有文件,都可以认为是注册了的bean和未注册的bean。spring的三大核心思想中的操作对象就是bean。

spring的作用是管理容器,可以理解为bean标签就是容器;Spring的核心组件有Core、Context、Beans;springBean采用工厂模式,通过配置文件的思想来管理对象之间的关系,减小耦合度,利用反射来创建(也叫动态代理),他们的顶级接口是BeanFactory

三大核心为:控制反转(IOC),依赖注入(DI),面向切面编程(AOP

1、控制反转(ioc)----->  Inversion of Control

这不是一种技术,而是一种思想

原本我们如果想要创建一个对象,通过new进行创建对象,然后放到一个容器中,等待程序调用或是修改该对象,这是正常思路,可以理解为正转;那如果我现在先得到这个容器,然后当我想要什么对象的时候,我就告诉这个容器,然后这个容器里就有了这个对象,这就叫反转。至于我怎么告诉这个容器,我想要什么对象,这就叫控制,所以连在一起就叫控制反转。

<bean id="userBean" class="testSpring.business.bean.MyBean" />

通过修改applicationContext.xml文件中bean标签的class来修改实现类,告诉容器我想要什么对象,从而将主动权交给接口,实现控制反转。

2、依赖注入(di)---- >Dependency Injection

spring就是通过反射来实现注入的,提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。

之前说我要告诉容器我想要什么对象,这可以理解为注入(是由我告诉容器我需要一个对象)。那谁会用到呢?当然是应用程序,这就是依赖,连在一起就叫依赖注入,当然控制反转要和依赖注入一起使用才行。

四种方式实现依赖注入:1. 属性注入 2. 构造方法注入 3. 工厂方法注入 4. 注解注入(使用@Autowire注解)

3、面向切面编程(AOP)---->Aspect Oriented Programming

这是一种思想,也是一种技术。

3.1、写代码时,只需考虑主流程,而不考虑那些不重要的流程(通过aop添加这些流程)

3.2、偷懒(减少重复代码)比如debug的时候要打log

3.3、降低模块之间的耦合度,使系统跟容易扩展

AOP从功能上来说就是在执行某些业务逻辑的前后,可以允许你动态地添加一些操作(比如记录日志、或者是判断是否有权限等),这些操作的添加,完全不耦合于原来的业务逻辑,从而对原有业务逻辑完全是透明。

例如:当我完成项目之后,结果用户还想要在增加一些可有可无的小些功能,这时候你是去在你原来的工程上去添加吗?就算你知道怎么添加,那请问你找的不麻烦吗?这时候我们的aop就可以解决这个问题,从而实现为软件横向的扩展功能。

可以用于以下场景:Authentication 权限、Caching 缓存、Context passing 内容传递、Error handling 错误处理、Lazy loading 懒加载、Debugging 调试、logging, tracing, profiling and monitoring 记录跟踪 优化 校准、Performance optimization 性能优化、Persistence 持久化、Resource pooling 资源池、Synchronization 同步、Transactions 事务

AOP代理(AOP Proxy) 在Spring AOP中有两种代理方式,JDK动态代理和CGLIB代理。

Aspect(切面): Aspect 声明类似于 Java 中的类声明,在 Aspect 中会包含着一些 Pointcut 以及相应的 Advice。
Joint point(连接点):表示在程序中明确定义的点,典型的包括方法调用,对类成员的访问以及异常处理程序块的执行等等,它自身还可以嵌套其它 joint point。
Pointcut(切点):表示一组 joint point,这些 joint point 或是通过逻辑关系组合起来,或是通过通配、正则表达式等方式集中起来,它定义了相应的 Advice 将要发生的地方。
Advice(增强\通知):Advice 定义了在 Pointcut 里面定义的程序点具体要做的操作,它通过 before、after 和 around 来区别是在每个 joint point 之前、之后还是代替执行的代码。
Target object(目标对象):织入 Advice 的目标对象.。
Weaving(织入):将 Aspect 和其他对象连接起来, 并创建 Adviced object 的过程
 

 


版权声明:本文为qq_30306501原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
THE END
< <上一篇
下一篇>>