java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring读取存储对象

详解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对象的存储;

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读取存储对象的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文