对Spring IOC和AOP的理解

本文详细介绍了Spring框架的两大核心特性:控制反转(IOC)和面向切面编程(AOP)。通过实例对比了使用和不使用Spring时对象创建的区别,阐述了IOC如何简化对象管理。同时,讲解了AOP解决重复代码问题的原理及其应用场景。

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

Spring主要分为 控制反转(IOC)和 面向切面编程(AOP)

1、控制反转(IOC)
a.如果不使用Spring,我们一般是通过new关键字实现一个对象的初始化,比如我们如果在多个业务逻辑(Service)中要使用一个Dao对象,那么我们必须在每个业务逻辑处理类种都通过new的方式去生成Dao对象(确切的说,对象的生成是由程序员进行控制的),如下:
public class ServiceA {
    private Dao dao = new Dao();
}

public class ServiceB {
    private Dao dao = new Dao();
}

public class ServiceC {
    private Dao dao = new Dao();
}
很显然,这3个业务逻辑类种的dao对象并不是同一个

b.如果使用了Spring,我们一般是在Spring上下文配置文件中(也即applicationContext.xml),或者是直接添加@Controller、@Service、@Repository、@Component其中任一个注解。然后在业务逻辑类中直接注入即可。这样对象的生成并不是由程序员进行控制,因为我们并没有通过new关键字去创建这个对象,对象是由Spring容器进行管理(负责其创建、初始化、销毁等)的。这样相当于对象的生成权限由程序员变为Spring容器了。所以说是控制反转了。即java对象的生成由程序员反转为Spring容器。如下图,这样的好处也是比较明显的,那就是不同Service类中的dao对象是同一个。
@Service
public class ServiceA {
    @Autowired
    private Dao dao;
}

@Service
public class ServiceB {
    @Autowired
    private Dao dao;
}

@Service
public class ServiceC {
    @Autowired
    private Dao dao;
}
2、面向切面编程
通常,我们在编程中会有这样一种需求,那就是比如我做多个操作,都要验证一个用户的权限;或者我调用某个方法前,我都想打印下日志。如果采用硬编码方式,那么我们我们需要在每一个方法中都要加入这段重复的代码。某天如果我们想要重新修改下验证逻辑,那我们需要把每个方法里面的验证方法都要同步修改下,这样不仅显得麻烦,还极有可能出错。AOP恰好解决了这一个问题。
AOP的原理是基于动态代理实现的。AOP一般用于日志、缓存、拦截器、事务等场景。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值