Spring基于注解存储对象

2023-12-14 00:09:21

前言

上一篇文章中已经介绍了在Spring中存储Bean和取Bean的方法. 而在 Spring 中想要更简单的存储和读取对象的核?是使?注解. 这篇文章介绍如何基于注解存储对象

基于注解存储对象

基于注解存储对象第一步仍然是先修改spring配置文件. 加入代码

<?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:context="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">
    <context:component-scan base-package="com.annotation"></context:component-scan>
</beans>

其中代码<context:component-scan base-package="com.annotation"></context:component-scan>是在注册要扫描的包, spring启动后, 会自动在指定的包(此处是com.annotation)下扫描, 找到加了注解的类, 然后创建Bean对象并存储到spring容器中. 接下来介绍存储Bean对象的注解.

用于存储Bean对象的注解有五大类注解和一个方法注解.
五大类注解分别是: @Controller, @Service, @Repository, @Component, @Configuration
方法注解: @Bean



@Controller (控制器存储)

@Controller
public class UseController {
    public void print(){
        System.out.println("do_useController");
    }
}

@Service (服务存储)

@Service
public class UseService {
    public void print(){
        System.out.println("do_useService");
    }
}

@Repository (仓库存储)

@Repository
public class UseRepository {
    public void print(){
        System.out.println("do_useRepository");
    }
}

@Component (组件存储)

@Component
public class UseComponent {
    public void print(){
        System.out.println("do_useComponent");
    }
}

@Configuration (配置存储)

@Configuration
public class UseConfiguration {
    public void print(){
        System.out.println("do_useConfiguration");
    }
}


在五大类注解中, @Controller, @Service, @Repository, @configuration都是@Component的子类.

对于五大类注解的Bean对象命名规则, 观察底层实现源码之后发现. 如果类名前两位都是大写, 则Bean对象名与类名一致. 如果类名第一位大写, 第二位小写, 则Bean对象名是类名第一位小写, 其他位不变.


@Bean(方法注解)

@Bean要搭配类注解一起使用, 使用 @Bean 注解标记的方法将会被Spring容器注册为一个Bean, 并且该Bean的实例将由该方法返回。

@Component
public class UserBeans {
    @Bean
    public User user1(){
        User user = new User();
        user.setId(1);
        user.setName("zhangsan");
        user.setPassword("lisi");
        return user;
    }
}
	 User user = applicationContext.getBean("user1", User.class);
     System.out.println(user.getPassword());

在这里插入图片描述


@Bean注解中可以用namevalue指定Bean的对象名, 如果没有指定默认对象名默认为方法名. 上面的例子中没有指定对象名, 下面写一个指定对象名的例子.

@Component
public class UserBeans {
    @Bean(name = {"user0", "user"})
    public User user1(){
        User user = new User();
        user.setId(1);
        user.setName("zhangsan");
        user.setPassword("lisi");
        return user;
    }
}
    User user = applicationContext.getBean("user0", User.class);
    System.out.println(user.getPassword());

上面的这个例子在获取Bean对象时, 可以用user0, 也可以用user, 但是默认的方法名(user1)不能使用.


文章来源:https://blog.csdn.net/qq_62414152/article/details/134854269
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。