小滴课堂 独孤求败-小滴云架构大课十八式
//xia讠果☛:
3w lexuecode com
Spring主要模块介绍
1.Spring核心容器:核心容器是Spring框架的重要组成部分,也可以说是Spring框架的基础。他在整个框架中的作用是负责管理对象的创建,管理,配置等操作。其主要包含spring-core、spring-beans、spring-context、spring-expression组件。
2.面向切面编程:Spring框架还提供了面向切面编程的能力,利用面向切面编程,可以实现一些面向对象编程无法很好实现的操作。例如,将日志,事务与具体的业务逻辑解耦。其主要包含spring-aop、spring-aspects组件。
3.Instrumentation:该模块提供了为JVM添加代理的功能,该模块包含spring-instrument、spring-instrument-tomcat组件,使用较少,不必过分关注。
4.数据访问与集成:Spring框架为了简化数据访问的操作,包装了很多关于数据访问的操作,提供了相应的模板。同时还提供了使用ORM框架的能力,可以与很多流行的ORM框架进行整合,如hibernate,mybatis等等的著名框架。还实现了数据事务的能力,能够支持事务。包含spring-jdbc、spring-tx、spring-orm、spring-oxm、spring-jms、spring-messaging组件。
5.Web和远程调用:Spring框架支持Web开发,以及与其他应用远程交互调用的方案。包含spring-web、spring-webmvc、spring-websocket、spring-webmvc-portlet组件。
6.Spring测试:Spring框架提供了测试的模块,可以实现单元测试,集成测试等等的测试流程,整合了JUnit或者TestNG测试框架。包含spring-test组件。
使用Spring框架可以带来以下好处
1、轻量:非入侵性的、所依赖的东西少、资源占用少、部署简单,不同功能选择不同的 jar 组合。
2、容器:工厂模式实现对 JavaBean 进行管理,通过控制反转(IOC)将应用程序的配置和依赖性与应用代码分开。
3、松耦合:通过 xml 配置或注解即可完成 bean 的依赖注入。
4、AOP:通过 xml 配置 或注解即可加入面向切面编程的能力,完成切面功能,如日志,事务等的统一处理。
5、方便集成:通过配置和简单的对象注入即可集成其他框架,如 Mybatis、Hibernate。
6、丰富的功能:JDBC层抽象、事务管理、MVC、Java Mail、任务调度、JMX、JMS、JNDI、EJB、动态语言、远程访问、Web Service等。
小滴课堂 独孤求败-小滴云架构大课十八式 - 底层IOC容器
使用IOC最大的好处就是减少了代码的耦合度,降低了程序的维护成本。可能很多人都知道这个道理,就是不太明白它到底是怎么降低的,别慌下面让我来给大家讲解一下。
假设现在有一道菜:宫保鸡丁。
// 伪代码
public class KungPaoChicken {
public static KungPaoChicken getKungPaoChicken(各种食材) {
// 加工各种食材最终得到一份美味的宫爆鸡丁。
return KungPaoChicken;
}
}
传统做法
如果现在不使用IOC,我们想要吃到宫保鸡丁,那么就需要如下操作。
// 伪代码
public class Person() {
// 采购各种食材
// 准备好各种食材通过KungPaoChicken获取到一份宫保鸡丁。
KungPaoChicken kungPaoChicken = KungPaoChicken.getKungPaoChicken(各种食材);
}
代码之间的耦合关系图:
看起来也不难,也不麻烦对吧?
别着急下定论,现在只是一个人想要宫保鸡丁,假如现在有10个人都想要那?是不是有十份相同的代码?这10个人都和KungPaoChicken有耦合。又比如现在需要的食材有所改变,那这样的话是不是这10个人都需要调整代码?这么一来是不是发现这种实现方式一点也不友好。
底层IOC容器加入对象三种方式
-
配置文件方式:可以通过在配置文件中配置对象的信息,然后在程序启动时读取配置文件并根据配置信息创建对象,并将其加入到IOC容器中。
-
注解方式:可以通过在对象上添加特定的注解(如@Component、@Service、@Repository等),然后在程序启动时通过扫描指定包路径下的所有类并解析注解,将带有注解的类创建对象并加入到IOC容器中。
-
编程方式:可以通过在程序中通过编程方式创建对象,并将其加入到IOC容器中。通常通过调用IOC容器的相关API(如registerBean、registerSingleton等)来实现。