Spring基本概念复习以及部分细节

本文详细介绍了控制反转(IoC)和依赖注入(DI)的概念及其在不同框架中的实现方式,包括Spring框架中的应用场景。此外,还探讨了Spring Bean的初始化顺序及配置文件中的不常用方法,最后对面向方面编程(AOP)进行了概述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1:Ioc: 控制反转(Inversion of control)
将设计好的类交给系统去控制,而不是在类内部控制,目前有4种类型的Ioc:
Type 0:不用IOC,使用时创建相应的类,比如在构造函数里创建。
Type 1:出现于Avalon Framework。一个组件实现了Servicable接口,就必须实现service方法,并传入一个ServiceManager。其中会含有需要的其它组件。只需要在service方法中初始化需要的Boy。

public class Girl implements Servicable {
Kissable kissable;
public void service(ServiceManager mgr) {
kissable = (Kissable) mgr.lookup(“kissable”);
}
public void kissYourKissable() {
kissable.kiss();
}
}

Type 2:出现在Spring Framework中,通过JavaBean中的set方法,她依赖于配置文件或者注解。
Type 3:通过构造函数传入参数。
2.Dependency Injection:依赖注入
简单来讲,依赖注入实际上是需要通过容器来完成:
1:具体ServiceProvider的创建
2:ServiceUser和ServiceProvider的运行时绑定
一般来讲,容器(Container)提供3种注册和获取的方法:
1:Constructor Injection(构造器注入)
2:Setter Injection(设值注入)
3:Interface Injection(接口注入)---最不优雅

public interface InjectFinder {
void injectFinder(MovieFinder finder);
}


class MovieLister: InjectFinder
{
public void injectFinder(MovieFinder finder) {
this.finder = finder;
}
}

3:Spring Bean初始化顺序
1.构造函数
2.初始化属性
3.如果实现了BeanFactoryAware 接口执行setBeanFactory方法
4.如果实现了InitializingBean 接口执行afterPropertiesSet方法
5.如果在配置文件中指定了init-method,那么执行该方法
6.如果实现了BeanFactoryPostProcessor 接口在 “new”其他类之前执行 postProcessBeanFactory 方法(通过这个方法可以改变配置文件里面的属性值的配置)
7.如果实现了BeanFactoryPostProcessor 接口,那么会在其他bean初始化方法之前执行postProcessBeforeInitialization 方法,之后执行postProcessAfterInitialization方法
4:配置文件中bean标签不常用的方法
1:lazy-init:延迟初始化
2:init-method:初始化方法
3:destroy-method:销毁方法
4:dependes-on:依赖的bean(用来制定bean的初始化顺序)
5.AOP: 面向方面编程(Aspect Oriented Programming)
AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。AOP实际是GoF设计模式的延续,设计模式孜孜不倦追求的是调用者和被调用者之间的解耦,AOP可以说也是这种目标的一种实现。
Aspect是一种新的模块化机制,用来描述分散在对象、类或函数中的横切关注点(crosscutting concern)。从关注点中分离出横切关注点是面向侧面的程序设计的核心概念。分离关注点使得解决特定领域问题的代码从业务逻辑中独立出来,业务逻辑的代码中不再含有针对特定领域问题的代码调用,业务逻辑同特定领域问题的关系通过侧面来封装、维护,这样原本分散在整个应用程序重的变动可以很好的管理起来。
AOP应用范围
  很明显,AOP非常适合开发J2EE容器服务器,目前JBoss 4.0正是使用AOP框架进行开发。
  具体功能如下:
Authentication 权限
Caching 缓存
Context passing 内容传递
Error handling 错误处理
Lazy loading 懒加载
Debugging  调试
logging, tracing, profiling and monitoring 记录跟踪 优化 校准
Performance optimization 性能优化
Persistence  持久化
Resource pooling 资源池
Synchronization 同步
Transactions 事务
AOP联盟提到的AOP技术:
AspectJ:源代码和字节码级别的编织器,用户需要使用不同于Java的语言。
AspectWerkz:AOP框架,使用字节码动态编织器和XML配置。
JBoss-AOP:
BCEL:
Javassist:
### 关于Spring框架期末考试复习资料 #### Spring核心概念理解 深入掌握Spring的核心特性对于应对期末考试至关重要。重点在于理解和应用IoC容器、AOP编程以及Bean管理机制等内容[^1]。 #### IoC/AOP原理剖析 - **控制反转(IoC)** 是指对象创建和依赖关系由外部容器负责,而非程序内部自行实例化。这有助于降低组件间的耦合度并提高灵活性。 - **面向切面(AOP)** 利用横切关注点分离业务逻辑与其他功能(如日志记录),通过代理模式增强目标对象行为而不修改其源码。 #### 动态代理实现细节 Java中的动态代理主要分为两种形式:基于接口的JDK Proxy 和 基于类字节码操作的 CGLIB 。前者适用于实现了特定接口的对象;后者则用于那些没有具体接口定义的情况,在不改变原有结构的基础上扩展新能力。 #### 循环依赖解决方案——三级缓存策略 当两个或多个bean之间形成相互引用时就会发生循环依赖问题。为了处理这种情况,Spring采用了一套复杂的三级缓存体系来确保即使存在这样的关联也能正常加载beans。具体来说就是利用singletonObjects, earlySingletonObjects 及 singletonFactories三个层次存储不同状态下的单例bean实例,从而有效解决了这一难题。 #### 后置处理器(Post Processor) 此类工具允许开发者自定义初始化过程前后的行为动作,比如注册额外的拦截器或是调整某些属性设置等。常见的有`BeanPostProcessor`,它可以在任何普通的bean被实际注入之前对其进行加工改造。 #### `@Transactional`注解解析及其工作流程 此注解用来声明式地开启事务边界,并自动管理和回滚异常情况下的数据库更改。其实现涉及到平台TransactionManager的选择、传播特性的设定等多个方面。了解这些可以帮助更好地设计可靠的数据访问层服务。 #### 事务传播级别的意义 不同的场景可能需要不一样的事务隔离级别以满足一致性需求。例如,默认情况下会继承上级已有的事务上下文继续执行;而在其他情形下或许更倾向于新开独立单元来进行保护性提交等等。 #### BeanFactory vs ApplicationContext对比分析 两者都是用来获取Spring容器内托管的各种资源和服务的关键入口之一。不过相较于前者较为基础的功能集而言,后者提供了更为丰富的API支持,包括但不限于事件发布订阅机制、国际化消息转换等功能模块。 ```java // 示例代码展示如何使用@Autowired进行依赖注入 import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class MyService { private final AnotherService anotherService; @Autowired public MyService(AnotherService anotherService){ this.anotherService = anotherService; } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值