Spring存储和读取对象的常见方法

上一篇文章简单介绍了Spring的创建和使用的过程。文中使用的的存储对象和读取对象方式是非常繁琐的,下面将为大家介绍更为简单的方式。

存储Bean对象

1.配置Bean的扫描根路径

<?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=""></content:component-scan>
</beans>

在这里插入图片描述
在存储对象之前,配置存储对象的扫描包路径。在当前路径下,添加注解的会被扫描到,并存入Spring中。

2.使用注解

1.类注解

五大类注解
  • @Controller
    控制层,检测参数的合法性。
  • @Service
    服务层,要调用几个方法或者接口,业务组装
  • @Repository
    数据持久层,业务实现
  • @Component
    组件(工具层)
  • @Configuration
    配置层,针对当前项目做一些设置

在当前类前添加上述五个类注解之一,就能够实现将这个类的对象注册到Spring容器中的功能。

@Controller
public class UserController {
    public void beauty(){
        System.out.println("你今天真漂亮!!!");
    }
}

在获取对象时,默认的获取名字为当前类的首字母小写,
特殊情况:当首字母和第二个字母都是大写时,获取名字是类名。
在这里插入图片描述

2.方法注解

  • @Bean
    注意:需要与五大类注解配合使用,单独一个Bean注解是不够的。

把当前方法返回的对象存入Spring中。

@Component
public class Users {
    @Bean //把当前方法返回的对象存入String中
    public User getUser(){
        User user=new User();
        user.setId(1);
        user.setName("陈宇");
        user.setSex("男");
        return user;
    }
}

把user对象存入Spring中,getBean获取的默认名字是方法名。

ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
User user=context.getBean("getUser", User.class); 
System.out.println(user.toString());

结果:
在这里插入图片描述

重命名Bean
  • @Bean(“”)
  • @Bean(name=“”)
  • @Bean(value=“”)(支持多个名称)
    在这里插入图片描述
    在这里插入图片描述

此时的getBean获取对象的名字就需要设置成注解内的名字了。

注意:重命名后,无法再通过原来的方法名获取对象了。

扫描二维码关注公众号,回复: 15780720 查看本文章

Spring通过@Bean注解存储Bean对象时,一个Bean对象可以有多个名字。但是如果不同对象具有相同的名字时,会怎么样。
不会报错。但只会在容器内存储一个。
存储哪一个呢?
如果是相同类型的不同对象,根据代码的执行顺序推断。代码的执行顺序是从上到下的。
如果是不同类型的不同对象,根据权重进行选择,权重越大,越先执行。

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

读取Bean对象

对象注入

把对象取出来放在某个类中。

1.属性注入

  • 同类型对象只有一个,直接将此对象注入到当前属性上

通过@Autowired注解实现。

创建一个User对象。将User对象存入到Spring中。

在这里插入图片描述

把User类注入到UserService中:

在这里插入图片描述

对代码进行测试:
获取UserService对象,如果能够成功执行getUser方法,成功返回User对象。就表示User类注入UserService成功。
在这里插入图片描述

  • 同类型对象有多个,根据名字来获取对象

1.直接改名字,改成存放进Spring的名字。
在这里插入图片描述
2.通过@Qualifier注解定义名称

在这里插入图片描述

  • 优点:简单
  • 缺点:
    1.无法注入final修饰的变量。因为java规定final修饰的变量只能初始化的时候就定义或者在构造方法中定义。
    2.只能在Ioc容器中使用。
    3.不符合单一设计原则。

2.setter注入

通过setter方法注入,也需要设置@Autowired。

在这里插入图片描述
如果有多个同类型的对象,获取方式也是和属性注入一样的,要么直接改成Bean对象名字,要么通过@Qualifier注解实现。

  • 优点:通常Setter只设置一个属性,不会设置多个,所以符合单一设计原则
  • 缺点:
    1.无法注入final修饰的变量。
    2.setter注入的对象可以被修改。因为setter本来就是一个方法,可以被多次调用和修改。

3.构造方法注入(官方推荐)

如果只有一个构造方法的时候,@Autowired注解可以省略。

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

  • 优点
    1.可以定义被final修饰的变量。
    2.注入的对象不会被修改,因为构造方法只执行一次。
    3.构造方法注入可以保证注入对象完全初始化。
    4.通用性更好,不局限于Ioc容器。

总结

Spring核心功能有存储对象和读取对象。
存储对象有两种方式:1.添加类注解 2.添加方法注解。
两种方法的前提是添加扫描目录。从添加的扫描目录下开始,扫描注解。
读取对象有依赖注入:1.属性注入 2.setter方法注入 3.构造方法注入

猜你喜欢

转载自blog.csdn.net/m0_71690645/article/details/131818368