前言
不是开发出身,现在的事情也杂,做过个项目对Spring就是照着用,没有系统了解过。
最近在看框架方面的内容,就顺便看看了Spring。
看了一天,对Spring是什么?IoC、依赖注入基本搞明白了。AOP应用场景懂了,原理没懂。
硬着头皮总结下吧,才对得起这一天的查阅。
1、产生的背景
2003年,一位大神不满EJB开发的臃肿,认为经过设计,利用javaBean的方式也一样达到企业开发的效果。于是编写了个开源的框架。其中的一个模块SpringMVC更完美的实现了web开发中的3层架构,影响深远。
现在2020年,17年前思想仍然影响着现在搬砖的小弟,大师真是革命性的人物。同时,Spring也不停在进化着,如SpringBoot,SpringCloud等。
2、好处
理解真真的不深刻,照搬。
- 低侵入式设计,代码污染极低
- 独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺
- Spring的DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦
- Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用
- Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问
- Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部
3、spring构成
核心容器
核心容器由spring-core,spring-beans,spring-context,spring-context-support和spring-expression(SpEL,Spring表达式语言,Spring Expression Language)等模块组成,它们的细节如下:
spring-core模块提供了框架的基本组成部分,包括 IoC 和依赖注入功能。
spring-beans 模块提供 BeanFactory,工厂模式的微妙实现,它移除了编码式单例的需要,并且可以把配置和依赖从实际编码逻辑中解耦。
context模块建立在由core和 beans 模块的基础上建立起来的,它以一种类似于JNDI注册的方式访问对象。Context模块继承自Bean模块,并且添加了国际化(比如,使用资源束)、事件传播、资源加载和透明地创建上下文(比如,通过Servelet容器)等功能。Context模块也支持Java EE的功能,比如EJB、JMX和远程调用等。ApplicationContext接口是Context模块的焦点。spring-context-support提供了对第三方库集成到Spring上下文的支持,比如缓存(EhCache, Guava, JCache)、邮件(JavaMail)、调度(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等。
spring-expression模块提供了强大的表达式语言,用于在运行时查询和操作对象图。它是JSP2.1规范中定义的统一表达式语言的扩展,支持set和get属性值、属性赋值、方法调用、访问数组集合及索引的内容、逻辑算术运算、命名变量、通过名字从Spring IoC容器检索对象,还支持列表的投影、选择以及聚合等。
数据访问/集成
数据访问/集成层包括 JDBC,ORM,OXM,JMS 和事务处理模块
Web
Web 层由 Web,Web-MVC,Web-Socket 和 Web-Portlet 组成
4、spring使用
4.1用idea创建spring项目
- idea创建maven项目
- 使用archetype,选择【】
- 在pom文件,添加依赖了的spring包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
</dependencies>
- 自动重新import
- 添加ApplicationContext.xml文件,注意要设定资源根目录
<bean id="student" class="master.com.Student" scope="prototype">
<property name="name"><value>setter学生的名字</value></property>
<property name="age"><value>20</value></property>
<property name="mainTeacher"><ref bean="teacher"></ref></property>
</bean>
<bean id="teacher" class="master.com.Teacher" scope="prototype">
<property name="name"><value>setter老师的名字</value></property>
<property name="education"><value>IT</value></property>
</bean>
- 会自带helloword,试运行
//以前的写法
helloWorld hw=new helloWorld();
hw.setName("常规方法");
System.out.println(hw);
System.out.println("======================");
//spring
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("ApplicationContext.xml");
helloWorld a=(helloWorld)applicationContext.getBean("a");
System.out.println(a);
System.out.println("======================");
可参考:https://blog.csdn.net/weixin_43373239/article/details/89578536
4.2 结合原来项目的理解
现在才明白了ApplicationContext的作用
还有配在里边的bean
当时真是懵懂照着配
总的来说,对Spring这个名词没有因未知而恐惧了,准备继续用1周的时间再多了解些。路漫漫兮,都得懂点啊。