在学习Spring前我认为应该先了解什么是Spring,Spring能给我们提供什么帮助这样才能更好的帮助我们理解Spring,下面是我自己对于Spring的理解
Spring最重要的两个点是DI(依赖注入)和AOP(切面编程),在这两个点钟依赖注入是为了帮助开发进行解耦以此来减少代码的耦合度,降低代码模块之间的依赖关系,提高代码的可维护性,AOP为我们提供了一种切面编程的机制,该机制可以让我们能够更加方便的关注横切关注点(日志、事务、安全等)代码,通过将这些与核心业务的分离来进一步的降低代码的复杂度。
Spring的优点:
-
模块化设计:Spring框架采用模块化的设计,可以根据需要选择使用特定的功能模块,提高了灵活性和可维护性。
-
依赖注入:Spring框架提供了依赖注入(DI)功能,可以方便地管理组件之间的依赖关系,降低了耦合度,使代码更易维护和测试。
-
AOP支持:Spring框架支持面向切面编程(AOP),可以将横切关注点(如日志、事务管理)与主业务逻辑分离,提高了代码的可维护性和可重用性。
-
事务管理:Spring框架提供了强大的事务管理功能,可以方便地管理事务的提交或回滚,保证数据的一致性。
-
简化开发:Spring框架提供了大量的现成组件和简化开发方式,例如Spring Boot可以快速搭建微服务应用,提高了开发效率。
Spring的缺点:
1.过度依赖:部分开发者认为Spring框架对项目的依赖过重,可能会导致项目变得臃肿和复杂。
2.性能开销:由于Spring框架提供了很多功能和抽象层,可能会带来一定的性能开销,特别是对于性能要求较高的项目。
3.配置繁琐:面对大型项目或复杂业务场景,配置Spring框架可能会变得繁琐,需要花费较多时间来配置和调试。
以下是使用Spring的例子
当我们未使用Spring时,我们都是通过创建new对象来获取对应的方法和属性,这样一来容易造成代码的耦合度高的问题,下面通过用对象的形式和使用Spring的形式来看Spring好用的地方
使用对象实现
如果我们有两个以上的对象需要使用我们可以看到我们需要new对应数量的操作,这样一来重复性工作太高了,代码的耦合度也高
1.创建Student类当做对象
package org.moyu.test;
public class Student {
String name;
int age;
String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
2.创建Main类调用
package org.moyu.test;
public class Main {
public static void main(String[] args) {
Student student = new Student();
student.setName("张三");
student.setAge(18);
student.setSex("男");
System.out.println("姓名:" + student.getName());
System.out.println("性别:" + student.getAge());
System.out.println("年龄:" + student.getName());
}
}
使用Spring实现
注意:我们使用Spring前需要先创建一个Maven项目引入Spring的依赖才能使用
我们可以看到使用Spring的话,如果我们有多个像student这样的实体需要去使用的话,我们就可以通过bean的形式来去获取引用
在Pom文件中引入相应的Spring依赖
<!-- Spring 基础包 Spring-core-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!-- Spring beans-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!-- spring context-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<!-- commons-logging-->
<dependency>
<groupId>commons-logging</groupId>
<artifactId>commons-logging</artifactId>
<version>1.2</version>
</dependency>
在java包下的org.moyu包下创建HellSpring类
package org.moyu;
public class HellSpring {
private String userName;
public void setUserName(String userName){
this.userName = userName;
}
public void show(){
System.out.println(userName+":欢迎来到Spring的世界");
}
}
在main包的resources包下创建applicationContext.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">
<!-- 定义bean-->
<bean id="HellSpring" class="org.moyu.HellSpring">
<!-- 为名字进行赋值-->
<property name="userName" value="小黄"></property>
</bean>
</beans>
在java包下的org.moyu包下创建AppTest启动类
package org.moyu;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 该程序为Spring的测试启动类
*/
public class AppTest
{
public static void main( String[] args )
{
// 初始化Spring容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// 获取容器中的HellSpring的实力
HellSpring hellSpring = (HellSpring) applicationContext.getBean("HellSpring");
// hellSpring.setUserName("张三");
hellSpring.show();
}
}