Spring核心概念!
发表于更新于
框架SpringSpring核心概念!
月伴飞鱼IOC(控制反转)
Spring
中有一个容器,我们将Bean
放到这个容器中,让这个容器为我们创建实例,当需要时我们直接从这个容器中进行获取即可。
使用IOC
最大的好处就是减少了代码的耦合度,降低了程序的维护成本。

实现原理:
Spring
实现IOC
容器的是通过:工厂 + 反射,实现的。
如果是基于全注解形式的话,只是将读取配置文件的步骤改成了读取配置类。
然后通过配置类获取需要创建实现的Bean
,并通过反射将其创建。

DI依赖注入
站在容器的角度,将对象创建依赖的其他对象注入到对象中。
AOP
AOP
面向切面的编程:在不改变源代码的情况下,实现对逻辑功能的修改。
- 常用的场景包括记录日志、异常处理、性能监控、安全控制(例如拦截器)等。
AOP
原理:
动态的生成代理类,代理类的执行过程为:
- 执行增加的代码(例如方法日志记录)-> 回调原方法 -> 增加的代码逻辑。
Spring AOP
动态代理采用 JDK
动态代理或 CGlib
动态生成代理类。
- 判断被切面的类是否有其实现的接口。
- 如果有对应的接口,则采用
JDK
动态代理,否则采用 CGlib
字节码生成机制动态代理方式。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| @SuppressWarnings("serial") public class DefaultAopProxyFactory implements AopProxyFactory, Serializable { @Override public AopProxy createAopProxy(AdvisedSupport config) throws AopConfigException { if (config.isOptimize() || config.isProxyTargetClass() || hasNoUserSuppliedProxyInterfaces(config)) { Class<?> targetClass = config.getTargetClass(); if (targetClass == null) { throw new AopConfigException("TargetSource cannot determine target class: " + "Either an interface or a target is required for proxy creation."); } if (targetClass.isInterface()) { return new JdkDynamicAopProxy(config); } return new ObjenesisCglibAopProxy(config); } else { return new JdkDynamicAopProxy(config); } }
|