温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring的存储方式与获取方式是什么

发布时间:2022-06-14 15:12:39 来源:亿速云 阅读:129 作者:iii 栏目:开发技术

本篇内容介绍了“Spring的存储方式与获取方式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

    存储方式(注解)

    使用注解的方式存储业务对象到Spring中会更简单

    1.配置spring.xml设置spring存入对象的根路径 ,目的是让Spring项目启动后,能够去根路径下的所有类中扫描并标识为需要存储到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: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">
        <!-- 配置一下:bean注解扫描的根路径(方面后面更简单存储对象到spring容器)-->
        <content:component-scan base-package="com.bit"></content:component-scan>
    </beans>

    2.使用注解将bean对象存储到spring框架中

    注解分类:

    1.类注解:@Controller【控制器】,@Service【业务逻辑层】,@Repository【数据持久层】,@Component【组件类】,@Configuration【配置类】

    2.方法注解:@Bean(必须配合类注解使用)

    @Controller

    创建bean对象

    package com.bit;
    
    import org.springframework.stereotype.Controller;
    
    /**
     * Description:
     * User: lmp
     * Date: 2022-05-24
     * Time: 19:23
     */
    @Controller
    public class UserController {
        public void sayHi(String name){
            System.out.println("Hi controller"+name);
        }
    }

    读取bean对象

    package com.bit;
    
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.support.ClassPathXmlApplicationContext;
    
    /**
     * Description:
     * User: lmp
     * Date: 2022-05-24
     * Time: 15:25
     */
    public class App {
        public static void main(String[] args) {
            //先获取对象的Spring
            ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
            //从 Spring 中获得存入的对象(将存入的类首字母小写,若类名字符大于2个,并且前两个字符都是大写,那么使用原类名作为bean的名字)
            UserController userController = context.getBean("userController",UserController.class);
            userController.sayHi("Bit");
        }
    }

    @Service

    和controller一样

    @Repository

    和controller一样

    @Configuration

    和controller一样

    @Component

    和controller一样

    方法注解@Bean

    一般写在组件里面,方法注解必须配合类注解使用,因为Spring默认是类级别的扫描

    package com.bit.util;
    
    import com.bit.Model.User;
    import com.sun.org.apache.bcel.internal.generic.RETURN;
    import org.springframework.context.annotation.Bean;
    import org.springframework.stereotype.Component;
    
    /**
     * Description:
     * User: lmp
     * Date: 2022-05-24
     * Time: 21:14
     */
    @Component
    public class UserBean {
        @Bean //将当前对象存储在Spring当中
        public User user1(){
            User user = new User();
            user.setId(1);
            user.setName("zhangsan");
            user.setAge(18);
            return user;
        }
    }
    重命名bean

    可以通过设置name属性给Bean对象进行重命名操作

    @Bean重命名可以有多个别名,但是当指定别名之后,方法名就取不到对象了

    package com.bit.util;
    
    import com.bit.Model.User;
    import com.sun.org.apache.bcel.internal.generic.RETURN;
    import org.springframework.context.annotation.Bean;
    import org.springframework.stereotype.Component;
    
    /**
     * Description:
     * User: lmp
     * Date: 2022-05-24
     * Time: 21:14
     */
    @Component
    public class UserBean {
        @Bean(name = {"u1","userInfo1"}) //将当前对象存储在Spring当中
        public User user1(){
            User user = new User();
            user.setId(1);
            user.setName("zhangsan");
            user.setAge(18);
            return user;
        }
    
        @Bean(name = "u2") //将当前对象存储在Spring当中
        public User user2(){
            User user = new User();
            user.setId(1);
            user.setName("lisi");
            user.setAge(18);
            return user;
        }
    }

    五大注解之间的关系

    从业务逻辑来说,@Controller是@Component的子类,同样,@Service,@Repository,@Configuration都是@Component的子类

    Spring的存储方式与获取方式是什么

    从Spring中获取对象

    @Autowired

    属性注入(属性注册)

    Spring的存储方式与获取方式是什么

    Setter注入

    Spring的存储方式与获取方式是什么

    构造方法注入

    Spring的存储方式与获取方式是什么

    注入注解

    @Qualifier 可以解决同一个类有两个以上的对象的情况,可以使用这个注解,它相当于@Resource(name=“”)

    三种注入的优缺点
    • 属性注入的优点是简洁,只适用于IoC容器,如果非IOC容器不可用,会报空指针异常

    • 构造方法注入是Spring推荐的注入方式,缺点是如果有多个注入会显得比较臃肿

    • Setter方式是Spring前期版本推荐的注入方式,但通用性不如构造方法,

    @Resource

    对象注入的另一种方式:使用@Resource注解,但Resource注解不能使用在构造方法上

    Spring的存储方式与获取方式是什么

    @Autowired和@Resource的区别

    1.出身不同,他们所属的包不一样,Resource属于javajdk中的javax包中,而Autowired属于springframework包中的

    2.作用范围不同,Resource不可以使用在构造方法注解上,而autowired可以

    3.功能不同 Resource可以使用name属性,从而完成对象的别名注入,而autowired没有。

    “Spring的存储方式与获取方式是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI