当前位置: 首页 > article >正文

Spring —— Spring简单的读取和存储对象Ⅰ

JavaEE传送门

JavaEE

Spring —— 初学 Spring, 理解控制反转

Spring —— Spring 的创建与使用


目录

  • Spring 简单的读取和存储对象
    • 存储 Bean 对象
      • 配置扫描路径
      • 添加注解存储 Bean 对象
        • @Controller (控制器存储)
        • @Service(服务存储)
        • @Repository(仓库存储)
        • @Component(组件存储)
        • @Configuration(配置存储)
        • 五大类注解的用途(重要)
        • 五大类注解之间的关系
      • 方法注解 @Bean


Spring 简单的读取和存储对象

存储 Bean 对象

配置扫描路径

spring-config.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:content="http://www.springframework.org/schema/context"
       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">
    <content:component-scan base-package="com.bit.service"></content:component-scan>
</beans>


添加注解存储 Bean 对象

  1. 类注解:@Controller@Service@Repository@Component@Configuration

  2. ⽅法注解:@Bean


@Controller (控制器存储)

使⽤ @Controller 存储 bean :

@Controller
public class ArticleController {
    public String Hello() {
        return "Hello Controller";
    }
}

获取 Bean 对象:

public class App {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
        System.out.println("App之后");
        ArticleController articleController = applicationContext.getBean("articleController", ArticleController.class);
        System.out.println(articleController.Hello());
    }
}

img src="C:\Users\gujiu\AppData\Roaming\Typora\typora-user-images\image-20230131150008853.png" alt="image-20230131150008853" style="zoom:80%;" />

获取 Bean 对象:

通常情况下, 通过将类首字母小写的方式来获取 Bean 对象.

特殊情况:

# 类名首字母是小写:

和类名首字母大写是一样的, 都是将类名首字母小写的方式来获取对象. (也就是使用原类名)

# 类名首字母和第二个字母都是大写:

使用原类名, 获取 Bean 对象.

总结:

当使用五大类注解时, 默认情况下获取 Bean 对象, 只需要将类名首字母小写即可, 然而, 当对象首字母和第二个字母都是大写时, 此时需要使用原类名才能正确的获取到 Bean 对象

# 项目中没有目录, 所有的类都写在 java 根目录下, 如何存取 Bean 对象?

spring-config.xml 中添加

<content:component-scan base-package="**"></content:component-scan>
<!-- **表示根目录 -->

# 注意 # 最佳方案: 给项目创建合适的目录


@Service(服务存储)

使⽤ @Service 存储 bean :

@Service
public class UserService {
	public void sayHi(String name) {
		System.out.println("Hi," + name);
	}
}

获取 Bean 对象:

class App {
	public static void main(String[] args) {
 		// 1.得到 spring 上下⽂
 		ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
 		// 2.得到 bean
 		UserService userService = (UserService) context.getBean("userService", UserService.class);
 		// 3.调⽤ bean ⽅法
 		userService.sayHi("gujiu");
 	}
}

@Repository(仓库存储)

使⽤ @Repository 存储 bean :

@Repository
public class UserRepository {
    public String sayHi() {
        return  "hi, Repository";
    }
}

@Component(组件存储)

使⽤ @Component 存储 bean :

@Component
public class UserComponent {
    public String sayHi() {
        return  "hi, component";
    }
}

@Configuration(配置存储)

使⽤ @Configuration 存储 bean :

@Configuration
public class UserConfiguration {
    public String sayHi() {
        return  "hi, Configuration";
    }
}


为什么需要五个类注解呢?

  1. 通过类注解, 可以直接了解当前类的用途.
  2. 功能有细微的不同, 后续文章会详细展开 (Spring MVC/ Spring Boot)

五大类注解的用途(重要)

  • @Controller (控制器):表示的是业务逻辑层, 用来控制用户的行为, 它用来检查用户参数的有效性.
  • @Servie (服务):归属于服务层, 调用持久化类实现响应的功能. (不直接和数据库交互, 它类似于控制中心).
  • @Repository (仓库):归属于持久层, 是直接和数据库进行交互的. 通过每一个表都会对应一个 @Repository.
  • @Configuration (配置):归属于配置层, 是用来配置当前项目的一些信息.
  • @Component: 归属于公共工具类, 提供某些公共方法.

程序的⼯程分层,调⽤流程如下:


五大类注解之间的关系

我们查看 @Controller 注释的源码, 我们发现里面有一个 @Component 注解

我们再查看 @Service / @Repository / @Configuration 注解的源码发现, 里面都有一个 @Component 注解

小结: @Component 是其他四个类的父类


方法注解 @Bean

使用 @Bean 方法注解, 将返回的对象存储到 Spring 中

获取 Bean 对象:

ApplicationContext applicationContext =
                new ClassPathXmlApplicationContext("spring-config.xml");
Student student = applicationContext.getBean("student", Student.class);
System.out.println(student.toString());

# 注意事项 #

  • @Bean 注解一定要配合五大类使用, 否则是无效的.

  • @Bean 默认情况下, Bean name = 方法名.

  • 当给 @Bean 设置了 name 属性之后, 使用原方法名就不能获取到对象了, 只能使用设置的名称才能获取.


🌷(( ◞•̀д•́)◞⚔◟(•̀д•́◟ ))🌷

以上就是今天要讲的内容了,希望对大家有所帮助,如果有问题欢迎评论指出,会积极改正!!

在这里插入图片描述
在这里插入图片描述

这里是Gujiu吖!!感谢你看到这里🌬
祝今天的你也
开心满怀,笑容常在。

http://www.kler.cn/a/4356.html

相关文章:

  • MySQL NaviCat 安装及配置教程(Windows)【安装】
  • Linux自学指南(学习路线大纲)
  • c#删除文件和目录到回收站
  • 《AI赋能鸿蒙Next,打造极致沉浸感游戏》
  • TCP 连接状态标识 | SYN, FIN, ACK, PSH, RST, URG
  • 【无标题】
  • php使用yield处理大数据文件
  • Python中 join() 函数的使用方法
  • vue+springboot贫困山区儿童衣物捐赠网站系统
  • 基于Spring、Spring MVC、MyBatis的共享单车管理系统
  • Studio One没有声音怎么办 Studio One工程没有声音
  • Go底层原理:一起来唠唠GMP调度(一)
  • 【华为OD机试 2023最新 】 区块链文件转储系统(C++ 100%)
  • IO的类型(BIO、NIO、AIO)
  • GameFramework框架详解之 Config全局配置
  • Nacos配置中心优雅配置JSON数据格式
  • 第二类斯特林数
  • 多少个X 蓝桥杯模拟
  • dp-一和零
  • 『Linux从入门到精通』第 ⑧ 期 - 项目自动化构建工具——make/Makefile
  • 解决华为云鲲鹏arm架构运行IoTDB经常自动挂掉
  • 腾讯云短信接入发送短信 Java
  • CXL 2.0白皮书解读翻译:计算快速链路,相对于CXL 1.1的改进,有哪些提升和要求
  • 【索引失效如何排查】
  • 100种思维模型之反脆弱思维模型-40
  • 最全总结---36种MySQL时间函数