非web应用下快速搭建Spring环境

Spring诞生之初就不是为web项目定制的。

首先我们要弄明白常用的web项目和非web项目的区别在哪儿?无疑是服务启动和执行逻辑触发的方式:

  • web项目需要依赖web容器来启动,通过http请求来触发相关的服务;
  • 非web项目则不需要依赖web容器来启动,它可以是自启动的;

添加Spring依赖

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <spring.version>5.0.2.RELEASE</spring.version>
    <jackson.version>2.11.4</jackson.version>
</properties>

<dependencies>
    <!-- Spring 基础jar导入 -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-core</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-beans</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context-support</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-expression</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <!-- start > Spring AOP-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aop</artifactId>
        <version>${spring.version}</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-aspects</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- end > Spring AOP-->

    <!-- start > Spring jdbc-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jdbc</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- end > Spring jdbc-->

    <!-- start > Spring tx事务-->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-tx</artifactId>
        <version>${spring.version}</version>
    </dependency>
    <!-- end > Spring tx事务-->

    <!--Jackson-->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-core</artifactId>
        <version>${jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson.version}</version>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>${jackson.version}</version>
    </dependency>

</dependencies>

<build>
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.5</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </pluginManagement>
</build>

创建Spring容器

xml方式

spring-beans.xml配置文件

在resources目录下创建spring-beans.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"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:jdbc="http://www.springframework.org/schema/jdbc"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xmlns:beans="http://www.springframework.org/schema/beans"
       xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd
        http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd ">

    <!--开启注解-->
    <context:annotation-config/>

    <!--扫描包路径-->
    <context:component-scan base-package="com.harvey.demo"/>

</beans>

创建启动类

public class SpringApplication {
    public static void main(String[] args) {
        AbstractApplicationContext applicationContext = new ClassPathXmlApplicationContext("classpath:spring-beans.xml");//得到spring容器
        applicationContext.start();
        //新开一个线程阻止应用停止
        new Thread(() -> {
            synchronized (SpringApplication.class) {
                try {
                    SpringApplication.class.wait();
                } catch (Throwable e) {

                }
            }
        }).start();
    }
}

验证

创建一个定时任务,可以看到在控制台会打印日志

@EnableScheduling
@Component
public class ScheduleTak {

    @Scheduled(cron = "* 0/1 * * * ?")
    public void execute() {
        System.out.println("-----------> ScheduleTak");
    }
}

全注解方式

基于注解的配置形式,由AnnotationConfigApplicationContext 上下文支持。

启动类只需要稍微改动下即可:

public class SpringApplication {
    public static void main(String[] args) {
        //接收的参数 为要 扫描的包 路径
        AbstractApplicationContext applicationContext = new AnnotationConfigApplicationContext("com.harvey.demo");
        applicationContext.start();
        //新开一个线程阻止应用停止
        new Thread(() -> {
            synchronized (SpringApplication.class) {
                try {
                    SpringApplication.class.wait();
                } catch (Throwable e) {

                }
            }
        }).start();
    }
}

 

posted @ 2023-11-11 17:47  残城碎梦  阅读(91)  评论(0编辑  收藏  举报