Spring 使用详解

简介: Spring 使用详解

​
引入spring及测试的依赖

        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.3.16</version>
    </dependency>
    <!-- org.springframework/spring-test -->
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>5.3.16</version>
        <scope>test</scope>
    </dependency>

    <!-- org.junit.jupiter/junit-jupiter-api -->
    <dependency>
        <groupId>org.junit.jupiter</groupId>
        <artifactId>junit-jupiter-api</artifactId>
        <version>5.8.2</version>
        <scope>test</scope>
    </dependency>

    <!-- org.projectlombok/lombok -->
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.22</version>
        <scope>provided</scope>
    </dependency>

在cn.chenxiejia.entity包下建一个Entity和Student类

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Entity {

private Set<Student> set;
private Map<Integer, Student> map;
private List<Student> list;
private String[] s;

}
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {

private int sid;
private String name;
public void init() {
    System.out.println("初始化");
}

public void close() {
    System.out.println("执行了销毁");
}

}
然后建一个spring的配置文件,spring的所有配置都在这里进行,当然,也可以使用注解的方式配置随后进行注解方式演示

配置文件applicationContext.xml

这里演示的各种类型属性的配置 配置思路是先进性扫包加载文件 再进行bean的配置 加载文件只加载一次即可

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

   xmlns:context="http://www.springframework.org/schema/context"
   xmlns="http://www.springframework.org/schema/beans"
   xsi:schemaLocation="http://www.springframework.org/schema/beans

http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">

<!--    扫描包-->
<context:component-scan base-package="cn.chenxiejia.entity"/>
<!--    加载properties文件-->
<context:property-placeholder location="db.properties"/>

<!--创建实例 init-method 初始化执行 destroy-method 销毁时执行-->
<bean id="zhang" class="cn.chenxiejia.entity.Student" init-method="init" destroy-method="close">
    <constructor-arg index="0" value="1"/>
    <constructor-arg index="1" value="张同学"/>
</bean>
<bean id="li" class="cn.chenxiejia.entity.Student">
    <constructor-arg name="name" value="李同学"/>
    <constructor-arg name="sid" value="2"/>

</bean>
<bean id="wang" class="cn.chenxiejia.entity.Student">
    <constructor-arg value="3"/>
    <constructor-arg value="王同学"/>
</bean>
<!-- id name 不能相同 唯一识别-->
<bean id="entity" class="cn.chenxiejia.entity.Entity">
    <property name="set">
        <set>
            <!--ref 为链接对象-->
            <ref bean="zhang"/>
            <ref bean="li"/>
            <ref bean="wang"/>
        </set>
    </property>
    <property name="list">
        <list>
            <ref bean="wang"/>
            <ref bean="zhang"/>
        </list>
    </property>
    <property name="map">
        <map>
            <entry key="1" value-ref="li"/>
            <entry key="2" value-ref="wang"/>
        </map>
    </property>
    <property name="s">
        <array value-type="java.lang.String">
            <value>ss</value>
            <value>dd</value>
            <value>ff</value>
        </array>
    </property>
</bean>
<bean id="entity1" name="entity2" class="cn.chenxiejia.entity.Entity">
    <property name="set">
        <set>
            <ref bean="zhang"/>
            <ref bean="li"/>
            <ref bean="wang"/>
        </set>
    </property>
    <property name="list">
        <list>
            <ref bean="wang"/>
            <ref bean="zhang"/>
        </list>
    </property>
    <property name="map">
        <map>
            <entry key="1" value-ref="li"/>
            <entry key="2" value-ref="wang"/>
        </map>
    </property>
    <property name="s">
        <array value-type="java.lang.String">
            <value>11</value>
            <value>sq</value>
            <value>ee</value>
        </array>
    </property>
</bean>


测试类1演示

//加载xml配置
@SpringJUnitConfig(locations = {"classpath:applicationContext.xml"})
public class Springdemo {

//@Autowired为自动装配 写清楚类型及实例名,实例名必须唯一或者该类型只有一个实例
@Autowired
Student li;
@Autowired
ApplicationContext ac;
@Autowired
Entity entity1;
@Autowired
Entity entity;
@Autowired
Student zhang;

@Test
public void demo() {
    //getDeanDefinitionNames为bean实例化的名称列表
    for (String b : ac.getBeanDefinitionNames()) {
        System.out.println(b);
    }
    System.out.println(li);
}
//@Qualifier("") 将该对象属性赋值给另一个
@Test
public void demo1(@Qualifier("entity1") Entity e) {
    System.out.println(e.getList());
    System.out.println(e.getMap());
    System.out.println(e.getSet());
    for (String s : e.getS()) {
        System.out.println(s);
    }
}

测试类2演示

@SpringJUnitConfig(locations = "classpath:applicationContext.xml")
//@PropertySource("db.properties")
public class SpringDemo1 {

//#用于获取实例属性 $用于获取配置文件内容
@Value("#{'zhang,li1,wang,zhao,li'.split(',')}")
private List<String> list;
@Value("${db.url}")
private String url;
@Value("#{li.name}")
private String map;

@Test
public void demo1() {
    System.out.println(list);
    System.out.println(url);
    System.out.println(map);
}

}
接下来使用注解的形式演示

在刚才的两个实体类上加个注解@Service表示标记为被扫描类

image.png

 然后创建一个配置类相当于之前的applicationContext.xml

里面的@Bean相当于的配置

//标注为配置类
@Configuration
//扫描包
@ComponentScan("cn.chenxiejia.entity")
//加载配置文件
@PropertySource("classpath:db.properties")
public class AppConfig {

@Bean(name = "s1", initMethod = "init", destroyMethod = "close")
public Student Student(@Value("1") int id, @Value("张同学") String name) {
    return new Student(id, name);
}

@Bean(name = "s2", initMethod = "init", destroyMethod = "close")
public Student Student2(@Value("2") int id, @Value("王同学") String name) {
    return new Student(id, name);
}

@Bean("e1")
public Entity e1(@Value("#{{s1,s2}}") Set<Student> set, @Value("#{{3:s1,4:s2}}") Map<Integer, Student> map, @Value("#{{s1,s2}}") List<Student> list, @Value("#{'java,phton,js,c,html'.split(',')}") String[] s) {
    return new Entity(set, map, list, s);
}

@Bean("e2")
public Entity e2(@Value("#{{s1,s2}}") Set<Student> set, @Value("#{{3:s1,4:s2}}") Map<Integer, Student> map, @Value("#{{s1,s2}}") List<Student> list, @Value("#{'aa,bb,cc,dd,ee'.split(',')}") String[] s) {
    return new Entity(set, map, list, s);
}

}
然后简单测试一下

//加载配置类
@SpringJUnitConfig(AppConfig.class)
public class SpringDemo2 {

@Autowired
Student s2;
@Autowired
Entity e1;

@Test
public void demo1() {
    System.out.println(e1);
}

}

​

目录
相关文章
|
Java Apache 数据库
spring boot 2.0之使用spring boot
spring boot依赖 每一个spring boot的发型版本都包含了所依赖的版本,如果升级spring boot版本,其依赖也会同步更新升级。maven的用户可以通过继承spring-boot-starter-parent。
5911 0
|
Java Spring 容器
SpringBoot自动配置的原理是什么?
Spring Boot自动配置核心在于@EnableAutoConfiguration注解,它通过@Import导入配置选择器,加载META-INF/spring.factories中定义的自动配置类。这些类根据@Conditional系列注解判断是否生效。但Spring Boot 3.0后已弃用spring.factories,改用新格式的.imports文件进行配置。
1554 0
|
人工智能 Java 测试技术
Spring Boot 集成 JUnit 单元测试
本文介绍了在Spring Boot中使用JUnit 5进行单元测试的常用方法与技巧,包括添加依赖、编写测试类、使用@SpringBootTest参数、自动装配测试模块(如JSON、MVC、WebFlux、JDBC等),以及@MockBean和@SpyBean的应用。内容实用,适合Java开发者参考学习。
1511 0
|
前端开发 Java 数据库
微服务——SpringBoot使用归纳——Spring Boot集成Thymeleaf模板引擎——Thymeleaf 介绍
本课介绍Spring Boot集成Thymeleaf模板引擎。Thymeleaf是一款现代服务器端Java模板引擎,支持Web和独立环境,可实现自然模板开发,便于团队协作。与传统JSP不同,Thymeleaf模板可以直接在浏览器中打开,方便前端人员查看静态原型。通过在HTML标签中添加扩展属性(如`th:text`),Thymeleaf能够在服务运行时动态替换内容,展示数据库中的数据,同时兼容静态页面展示,为开发带来灵活性和便利性。
652 0
|
XML Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot集成MyBatis——基于 xml 的整合
本教程介绍了基于XML的MyBatis整合方式。首先在`application.yml`中配置XML路径,如`classpath:mapper/*.xml`,然后创建`UserMapper.xml`文件定义SQL映射,包括`resultMap`和查询语句。通过设置`namespace`关联Mapper接口,实现如`getUserByName`的方法。Controller层调用Service完成测试,访问`/getUserByName/{name}`即可返回用户信息。为简化Mapper扫描,推荐在Spring Boot启动类用`@MapperScan`注解指定包路径避免逐个添加`@Mapper`
1232 0
|
Java 测试技术 微服务
微服务——SpringBoot使用归纳——Spring Boot中的项目属性配置——少量配置信息的情形
本课主要讲解Spring Boot项目中的属性配置方法。在实际开发中,测试与生产环境的配置往往不同,因此不应将配置信息硬编码在代码中,而应使用配置文件管理,如`application.yml`。例如,在微服务架构下,可通过配置文件设置调用其他服务的地址(如订单服务端口8002),并利用`@Value`注解在代码中读取这些配置值。这种方式使项目更灵活,便于后续修改和维护。
505 0
|
SQL Java 数据库连接
微服务——SpringBoot使用归纳——Spring Boot使用slf4j进行日志记录—— application.yml 中对日志的配置
在 Spring Boot 项目中,`application.yml` 文件用于配置日志。通过 `logging.config` 指定日志配置文件(如 `logback.xml`),实现日志详细设置。`logging.level` 可定义包的日志输出级别,例如将 `com.itcodai.course03.dao` 包设为 `trace` 级别,便于开发时查看 SQL 操作。日志级别从高到低为 ERROR、WARN、INFO、DEBUG,生产环境建议调整为较高级别以减少日志量。本课程采用 yml 格式,因其层次清晰,但需注意格式要求。
1676 0
|
JavaScript Java Maven
【SpringBoot(二)】带你认识Yaml配置文件类型、SpringMVC的资源访问路径 和 静态资源配置的原理!
SpringBoot专栏第二章,从本章开始正式进入SpringBoot的WEB阶段开发,本章先带你认识yaml配置文件和资源的路径配置原理,以方便在后面的文章中打下基础
743 4
|
Java 测试技术 数据库连接
【SpringBoot(四)】还不懂文件上传?JUnit使用?本文带你了解SpringBoot的文件上传、异常处理、组件注入等知识!并且带你领悟JUnit单元测试的使用!
Spring专栏第四章,本文带你上手 SpringBoot 的文件上传、异常处理、组件注入等功能 并且为你演示Junit5的基础上手体验
1254 3
|
缓存 NoSQL Java
基于SpringBoot的Redis开发实战教程
Redis在Spring Boot中的应用非常广泛,其高性能和灵活性使其成为构建高效分布式系统的理想选择。通过深入理解本文的内容,您可以更好地利用Redis的特性,为应用程序提供高效的缓存和消息处理能力。
1738 79