Spring框架配置简化过程

2023/12/25 Spring框架

Spring的IOC和AOP思想的实现,从框架的设计角度而言,极大的简化开发。但是对于前期的Spring而言,还需要大量的配置来实现。Spring不断的发展,从Spring更新的历史版本上可以看出 这个过程在不断的被优化,SpringBoot的推出也是极大的帮助了我们简化开发流程。

# 1、配置简化过程概览

Spring配置优化流程变化如下:

XML配置方法 -> Java配置方式 -> 注解配置方式 -> SpringBoot托管配置方式

这个优化配置过程不是说完全替代,而是相辅相成的,每个阶段都有其存在的意义。

接下来我们就看下各个配置方式的实现,从中体会整个简化过程。

# 2、XML配置方法

创建接口及实现

// 接口
public interface AopService {
    public void sayOne();
}

// 实现
public class AopServiceImpl implements AopService {
    @Override
    public void sayOne() {
        System.out.println("这是One语句");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

创建aopSpring.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 id="aopServiceImpl" class="com.xygalaxy.service.impl.AopServiceImpl"></bean>

</beans>
1
2
3
4
5
6
7
8
9

测试获取aopServiceImpl对象

public class AopController {
    @Test
    public void testAop(){
       ApplicationContext ac = new ClassPathXmlApplicationContext("aopSpring.xml");
       AopServiceImpl aopService = ac.getBean(AopServiceImpl.class);
       aopService.sayOne();
    }
}

/**
 * 输出结果:这是One语句
 */
1
2
3
4
5
6
7
8
9
10
11
12

# 3、Java配置方式

创建接口及实现

// 接口
public interface AopService {
    public void sayOne();
}

// 实现
public class AopServiceImpl implements AopService {
    @Override
    public void sayOne() {
        System.out.println("这是One语句");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

创建配置类

@Configuration
public class AopConfig {

    @Bean("aopServiceImpl")
    public AopServiceImpl getAopService(){
        AopServiceImpl aopService = new AopServiceImpl();
        return aopService;
    }

}
1
2
3
4
5
6
7
8
9
10

测试获取aopServiceImpl对象

public class AopController {
    @Test
    public void testAop(){
       ApplicationContext ac = new AnnotationConfigApplicationContext(AopConfig.class);
       AopServiceImpl aopService = ac.getBean(AopServiceImpl.class);
       aopService.sayOne();
    }
}

/**
 * 输出结果:这是One语句
 */
1
2
3
4
5
6
7
8
9
10
11
12

# 4、注解配置方式

创建接口及实现

增加注解@Service,交给Spring管理

// 接口
public interface AopService {
    public void sayOne();
}

// 实现
@Service
public class AopServiceImpl implements AopService {
    @Override
    public void sayOne() {
        System.out.println("这是One语句");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13

测试获取aopServiceImpl对象

// 单元测试需要加@RunWith注解,正常应用中不需要
@RunWith(SpringJUnit4ClassRunner.class)
public class AopController {

    @Autowired
    private AopServiceImpl aopService;

    @Test
    public void testAop(){
       aopService.sayOne();
    }
}

/**
 * 输出结果:这是One语句
 */
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

# 5、SpringBoot托管配置方式

Spring Boot是一个开源的Java框架,它简化了基于Spring平台开发应用程序的过程。它提供了预设的模板,通过自动配置(auto-configuration)和约定大于配置(convention-over-configuration)的原则降低了开发者的配置负担。这让开发者可以专注于应用程序的功能开发,提高了开发效率。

Spring Boot的主要特点包括:

  • 快速构建和简化配置:Spring Boot自动配置许多涉及安全性、数据库连接、嵌入式服务器等方面的参数,用户只需完成少量配置即可快速创建并运行一个完整的项目。
  • 微服务支持:Spring Boot与Spring Cloud紧密集成,帮助开发者方便地构建微服务架构的应用程序。
  • 使用嵌入式服务器:Spring Boot应用默认可以直接嵌入Tomcat或者Jetty等Web服务器,方便进行开发和部署。
  • 外部化配置:Spring Boot支持将不同环境下的配置(如数据库参数或API密钥等)分离,使得应用程序在不同环境下的部署更加灵活。
  • 应用监控:Spring Boot Actuator提供了许多开箱即用的端点(如应用状态、指标和日志等),方便开发者了解和监视应用程序的运行状态。
  • 大量插件支持:Spring Boot支持许多插件和第三方库,用以简化各种开发任务,例如数据访问、安全性、缓存和社交功能等。

下面我们简单创建个SpringBoot项目看看Web项目,当然也可以学习完SpringMVC再来看这里做比较。

新建SpringBoot项目

新建项目

选择需要的依赖

最终项目结构

application.yml

server:
  port: 8085
1
2

HelloSpringBootControoler

@RestController
public class HelloSpringBootControoler {

    @GetMapping("/hello")
    public ResponseEntity<String> sayHello(){
        return new ResponseEntity<>("hello SpringBoot", HttpStatus.OK);
    }
}
1
2
3
4
5
6
7
8

SpringbootStudyApplication

@SpringBootApplication
@ComponentScan("com.xygalaxy")
public class SpringbootStudyApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringbootStudyApplication.class, args);
    }

}
1
2
3
4
5
6
7
8
9

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>3.2.1</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.xygalaxy</groupId>
    <artifactId>springboot-study</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-study</name>
    <description>springboot-study</description>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52

项目启动,这几个任意一个点击都可以启动

浏览器测试访问

http://localhost:8085/hello
<!-- 或者 -->
http://127.0.0.1:8085/hello
1
2
3

可以看出SpringBoot只需要很简单的配置就可以创建一个Web项目,不单是Web项目,其他的可以看SpringBoot章节。