详解Spring如何更简单的读取和存储对象
作者:摸鱼王胖嘟嘟
这篇文章主要为大家详细介绍了Spring中如何更简单的实现读取和存储对象,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
前置工作
在spring-config.xml添加如下配置:配置bean的扫描根路径:只有当前目录下的类才会扫描是否添加了注解,如果添加了注解,就将这些加了注解的类,存放到IoC容器中。
<?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.java.demo"> </content:component-scan> </beans>
更加简单的存储Bean对象
两种方法:
1.通过类注解实现Bean对象的存储;
- @Controller:控制器,验证用户请求的数据正确性(安保系统)
- @Service:服务层,编排和调度具体执行方法的(客服中心)
- @Repository:持久层,和数据库进行交互,等同于DAO(Data Access Object) 数据访问层
- @Component:组件(工具类)
- @Configuration:配置项(配置项目中的一些配置)
2.通过方法注解实现Bean对象的存储
@Bean路径
使用@Controller(控制器存储)
package com.java.demo; import org.springframework.stereotype.Controller; @Controller(value = "userinfo") public class User { public void sayHi() { System.out.println("Hi,User~"); } }
import com.java.demo.User; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; @SuppressWarnings({"all"}) public class App { public static void main(String[] args) { // 1. 得到容器对象 ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); // 2. 得到 Bean 对象 User user = context.getBean("userinfo", User.class); // 3. 使用 Bean 对象 user.sayHi(); } }
import com.java.demo.Student; import com.java.demo.User; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; @SuppressWarnings({"all"}) public class App { public static void main(String[] args) { // 1. 得到容器对象 ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); // 2. 得到 Bean 对象 // User user = context.getBean("userinfo", User.class); Student student = context.getBean("student", Student.class); // 3. 使用 Bean 对象 // user.sayHi(); student.sayHi(); } }
原因就是:student没有加注解。
使用注解和XML是可以一起使用的。
类注解存储Bean命名问题
默认类名首字母小写就能获取到Bean对象。
获取不到Bean对象
使用原类名,可以获取到Bean对象
我们在获取Bean对象时,传入名称时,一般分为两种情况:
默认情况下:使用原类名首字母小写就能读取到Bean对象
特殊情况:如果不满足首字母大写和第二个字母小写的情况,那么使用原类名获取
Java项目标准分层
五大类注解之间的关系
方法注解@Bean
a.使用注意事项:@Bean 注解 必须要配合五大类注解一起使用
package com.java.demo.model; import java.time.LocalDateTime; @SuppressWarnings({"all"}) /** * 普通的文章实体类 */ public class ArticleInfo { private int aid; private String title; private String content; private LocalDateTime createtime; public int getAid() { return aid; } public void setAid(int aid) { this.aid = aid; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getContent() { return content; } public void setContent(String content) { this.content = content; } public LocalDateTime getCreatetime() { return createtime; } public void setCreatetime(LocalDateTime createtime) { this.createtime = createtime; } @Override public String toString() { return "ArticleInfo{" + "aid=" + aid + ", title='" + title + '\'' + ", content='" + content + '\'' + ", createtime=" + createtime + '}'; } }
package com.java.demo; import com.java.demo.model.ArticleInfo; import org.springframework.context.annotation.Bean; import org.springframework.stereotype.Controller; import java.time.LocalDateTime; @SuppressWarnings({"all"}) @Controller public class Articles { @Bean // 将当前方法返回的对象存储到 IoC 容器 public ArticleInfo articleInfo() { // 伪代码 ArticleInfo articleInfo = new ArticleInfo(); articleInfo.setAid(1); articleInfo.setTitle("今天周几?"); articleInfo.setContent("今天周一!"); articleInfo.setCreatetime(LocalDateTime.now()); return articleInfo; } }
import com.java.demo.UConfig; import com.java.demo.example.Teacher; import com.java.demo.model.ArticleInfo; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; @SuppressWarnings({"all"}) public class App { public static void main(String[] args) { // 1. 得到容器对象 ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml"); // 2. 得到 Bean 对象 // User user = context.getBean("userinfo", User.class); // Student student = context.getBean("student", Student.class); // UserService userService = context.getBean("userService",UserService.class); // Teacher teacher = context.getBean("teacher",Teacher.class); // UConfig uConfig = context.getBean("UConfig",UConfig.class); ArticleInfo articleInfo = context.getBean("articleInfo", ArticleInfo.class); // 3. 使用 Bean 对象 // user.sayHi(); // student.sayHi(); // userService.sayHi(); // teacher.sayHi(); // uConfig.sayHi(); System.out.println(articleInfo); } }
b.@Bean 获取时注意事项:@Bean的默认命名=方法名。
重命名@Bean的几种方式
方式1:@Bean("aaa")
方法2:@Bean(name = "aaa")
方式3:@Bean(value = "aaa")
重命名扩展:@Bean 支持指定多个名称@Bean(value = {“aaa”})默认命名注意事项:当@Bean重命名之后,那么默认的使用方法名获取Bean对象的方式就不能使用了。
以上就是详解Spring如何更简单的读取和存储对象的详细内容,更多关于Spring读取存储对象的资料请关注脚本之家其它相关文章!