个人笔记梳理,仅供参考
Spring是一款主流的JavaEE轻量级开源框架
Spring的狭义和广义
广义的Spring:Spring技术栈
泛指以Spring Framework为核心的Spring技术栈
经过十多年的发展,Spring已经不再是一个单纯的应用框架,而是逐渐发展成为一个由多个不同子项目(模块)组成的成熟技术,例如 Spring Framework、Spring Mvc、SpringBoot、spring Cloud、spring Data、springSecurity 等,其中 Spring Framework 是其他子项目的基础。
这些子项目涵盖了从企业级应用开发到云计算等各方面的内容,能够帮助开发人员解决软件发展过程中不断产生的各种实际问题,给开发人员带来了更好的开发体验。
狭义的 Spring:spring Framework
狭义的 Spring 特指 Spring Framework,通常我们将它称为 Spring 框架。
Spring 框架是一个分层的、面向切面的Java 应用程序的一站式轻量级解决方案,它是 Spring 技术栈的核心和基础,是为了解决企业级应用开发的复杂性而创建的。
Spring 有两个最核心模块: loC 和 AOP.
loC:Inverse of control 的简写,译为“控制反转”,指把创建对象过程交给 Spring 进行管理
AOP:Aspect Oriented Programming 的简写,译为"面向切面编程"。AOP 用来封装多个类的公共行为,将那些与业务无关,却为业务模块所共同调用的逻辑封装起来,减少系统的重复代码,降低模块间的耦合度。另外,AOP 还解决一些系统层面上的问题,比如日志、事务、权限等。
Spring Framework特点
非侵入式:使用 Spring Framework 开发应用程序时,Spring对应用程序本身的结构影响非常小。对领域模型可以做到零污染;对功能性组件也只需要使用几个简单的注解进行标记,完全不会破坏原有结构,反而能将组件结构进一步简化。这就使得基于 Spring Framework 开发应用程序时结构清晰、简洁优雅。
控制反转:10C--Inversion ofControl,翻转资源获取方向。把自己创建资源、向环境索取资源变成环境将资源准备好,我们享受资源注入。
面向切面编程:AOP--Aspect Oriented Programming,在不修改源代码的基础上增强代码功能。容器:Spring 10℃是一个容器,因为它包含并且管理组件对象的生命周期。组件享受到了容器化的管理,替程序员屏蔽了组件创建过程中的大量细节,极大的降低了使用门槛,大幅度提高了开发效率。
组件化:Spring实现了使用简单的组件配置组合成一个复杂的应用。在 Spring 中可以使用 XML 和Java 注解组合这些对象。这使得我们可以基于一个个功能明确、边界清晰的组件有条不紊的搭建超大型复杂应用系统
一站式:在 I0C和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库。而且 Spring,旗下的项目已经覆盖了广泛领域,很多方面的功能性需求可以在 Spring Framework 的基础上全部使用 Spring 来实现
引入spring-first的pom.xml文件依赖
<dependencies>
<dependency>
<!-- 引入springcontext依赖-->
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>6.0.2</version>
</dependency>
<!-- junit-->
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-api</artifactId>
<version>5.6.3</version>
</dependency>
</dependencies>
建类定义方法->按照spring规范建立xml文件,配置对象-->测试文件
入门案例:
User.java
package com.zzq;
public class User {
public void add(){
System.out.println("add.....");
}
public static void main(String[] args) {
User user=new User();
user.add();
}
}
bean.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 完成user对象创建
bean标签
id属性:唯一标识
class属性:要创建对象所在类的全路径(包名称+类名称)
-->
<bean id="user" class="com.zzq.User"></bean>
</beans>
TestUser.java
package com.zzq;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestUser {
@Test
public void testUserObject(){
//加载spring配置文件,对象创建
ApplicationContext context=
new ClassPathXmlApplicationContext("bean.xml");
//获取创建的对象
User user=(User)context.getBean("user");
System.out.println(user);
//使用对象调用方法进行测试
user.add();
}
}
无参数构造执行
使用反射根据类全路径创建对象
package com.zzq;
import org.junit.jupiter.api.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.lang.reflect.InvocationTargetException;
public class TestUser {
@Test
public void testUserObject(){
//加载spring配置文件,对象创建
ApplicationContext context=
new ClassPathXmlApplicationContext("bean.xml");
//获取创建的对象
User user=(User)context.getBean("user");
System.out.println(user);
//使用对象调用方法进行测试
user.add();
}
//反射创建对象
@Test
public void testUserObject1() throws ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException {
//获取类Class对象
Class clazz=Class.forName("com.zzq.User");
//调用方法创建对象
//Object o=clazz.newInstancce();
User user=(User)clazz.getDeclaredConstructor().newInstance();
System.out.println(user);
}
}