【Spring】Spring更简单的存储方式和获取方式

❤️Author: 老九
☕️个人博客:老九的CSDN博客
🙏 个人名言:不可控之事 乐观面对
😍 系列专栏: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中获取对象

@Autowired

  • 属性注入(属性注册)
    在这里插入图片描述

  • Setter注入
    在这里插入图片描述

  • 构造方法注入
    在这里插入图片描述

注入注解 @Qualifier

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

三种注入的优缺点

  • 属性注入的优点是简洁,只适用于IoC容器,如果非IOC容器不可用,会报空指针异常
  • 构造方法注入是Spring推荐的注入方式,缺点是如果有多个注入会显得比较臃肿
  • Setter方式是Spring前期版本推荐的注入方式,但通用性不如构造方法,

@Resource

  • 对象注入的另一种方式:使用@Resource注解,但Resource注解不能使用在构造方法上
    在这里插入图片描述

@Autowired和@Resource的区别

1.出身不同,他们所属的包不一样,Resource属于javajdk中的javax包中,而Autowired属于springframework包中的
2.作用范围不同,Resource不可以使用在构造方法注解上,而autowired可以
3.功能不同 Resource可以使用name属性,从而完成对象的别名注入,而autowired没有。

————————————————————————
♥♥♥码字不易,大家的支持就是我坚持下去的动力♥♥♥
版权声明:本文为CSDN博主「浦上青天」的原创文章

  • 21
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 20
    评论
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李小浦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值