spring哪里解耦合了?
spring的ioc解耦合了吗?
耦合的意思不是:希望修改代码时引起的代码改变越小吗,而spring的ioc只是从spring里面拿一个对象而已并不需要new而已。但如果我改了一个类里面的属性名称,那与之关联的类不是一样要改?所以spring哪里解耦合了?
简单得说就是创建对象和销毁对象不用你管了。如果你属性变了,关联的代码还是变,这个你理解的没错。
如果你以后写代码多了就能感觉出来了,一般ioc注入的是接口类型,比如下面这个
@Autoware//一个注解就好了,不需要new对象
XxxInterface interface;
Spring会根据你配置文件中的配置,找一个XxxInterface 的实现类给你注入进来。
那如果不注入的话,就得自己new个实现类
XxxInterface interface=new XxxInterfaceImpl();
但接口实现类有很多,如果你有一天要换别的实现类了,那所有用到它的地方就都得重写,但用注入的方式就不需要。
另外把bean交给spring,比如数据库SessionFactory、DataSource、TransactionManager等等这些,它资源开关什么的都由Spring管理了,不需要程序员操心。
它更多的是用这个ioc的思想去管理那些资源,不是管理我们普通的实体类。
它是在项目发展到一定规模之后才产生的这样的一种框架,所以初学的时候如果没接触过足够体量的项目,感受不到它的优势也是很正常的。
Spring框架通过依赖注入(DI)、面向切面编程(AOP)等技术实现了解耦合,具体如下:
1.依赖注入(DI):Spring通过IOC容器管理Bean的生命周期,将Bean的创建、初始化、销毁等过程交给容器处理,从而将Bean与使用Bean的对象分离,降低了耦合度。
2.面向切面编程(AOP):Spring通过AOP技术实现了横切关注点的分离,将不同模块之间的共性代码抽象出来,避免了代码的重复编写和维护,提高了代码的复用性和可维护性。
3.容器:Spring的IOC容器可以帮助开发人员管理应用程序中的Bean,减少了Bean的手动管理,从而降低了模块之间的耦合度。
4.配置:Spring的配置文件中可以定义Bean的属性、依赖关系等信息,通过配置文件的方式实现了模块之间的解耦合。
不仅仅只是一个方面解耦了,而且解耦并不是你理解的代码变少,解耦对象之间的关系变少、变明晰