【Spring】高效使用Spring

高效使用Spring

在初识Spring时,要使用Spring来存储对象,获取对象,步骤比较繁琐:

先创建Spring项目,再把类注册到Spring中,再获取对象并使用,总共三步,三步中又有很多小步。那其实我们是有方法可以更高效使用Spring的,具体点是更高效的注册类到Spring中,以及更高效的从Spring中获取对象。

1. 使用注解

为了更高效的存储对象,我们需要更改之前的存储方式,之前的方式是在spring-config.xml文件中添加一个节点标签,就把该类注册到Spring中了。每注册一个新的类就要在配置文件中添加一个节点标签,现在不需要修改配置文件了。使用注解可以高效的注册类到Spring中:

要将Bean存储到Spring中,Spring中的注解有两大类:

1️⃣类注解:@Controller @Service @Repository(仓库) @Component(组件) @Configuration(添加到类上)

2️⃣方法注解:@Bean(添加到方法上)

🔑比如使用类注解@Contoller添加到一个类上,该类就可以注册到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">
    <content:component-scan base-package="bit.com"></content:component-scan>
</beans>

🍎content标签中的base-package属性代表了该包下的根路径下的类和子包中的类都会被扫描,如果扫描到某个类是加了注解的,那就会将该类注册到Spring中。同理,如果某类加了注解,但是没有在该包下,是不能被注册到Spring中的。

image-20221122152612475

要想注册一个类到Spring中,该类必须添加注解,并且在配置文件的base-package包中。

🍎那如果一个类并没有在配置文件的包中,而又需要注册到Spring中,其实还是可以用最初的方法,在配置文件中添加一个bean标签来添加Bean对象的:

image-20221122201455904

☯️添加了注解并修改了配置文件后,如果需要从Spring中获取对象,该如何操作呢?

import bit.Hello;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {
   
    public static void main(String[] args) {
   
        //获取Spring上下文对象
        ApplicationContext context = new
                ClassPathXmlApplicationContext("spring-config.xml");
        //获取对象
        Hello hello = context.getBean("hello",Hello.class);
        //使用对象
        hello.sayHi();
    }
}

♉️获取上下文对象和之前一样,获取对象不同了,之前在配置文件中存放节点标签的时候有id的,可以根据id来获取对象,但现在没有标签了,那也无关紧要,默认的id是类名的小驼峰形式。也就是说如果类名是HelloWorld,那么id就默认是helloWorld。如果类名是Hello,那id默认是hello。

五大类注解含义

@Controller @Service @Repository(仓库) @Component(组件) @Configuration

==以上五大注解的功能都是一样的,==那既然功能都是一样的,为啥要设五个呢,一个注解不就可以了?

  • 其实这是方便程序员辨别所注解的类的用途的,五大注解各有各的含义:
  1. Controller:控制器:这是与前端直接交互的一层,验证前端传递的参数(url是否正确)
  2. Service:服务层:服务的编排和汇总:有多个服务需要去做,先调哪个服务,后调哪个服务。
  3. Repository:仓库:这是操作数据库的一层,代表该类是与数据库打交道的
  4. Component:组件:比如当前项目需要一个类来实现加密,一般就可以认为是组件,相当于工具
  5. Configuration:配置:当前项目需要的一些配置

image-20221122200751949

所以之所以分为五大注解,是为了程序员更容易看到这个类知道这个类是做啥工作的。

五大类注解之间的关系

五大注解之间的关系:

image-20221128105425191

🍎通过观察源码发现:Controller,Service,Repository,Configuration这几个注解从逻辑上来讲,他们是Component的子类。而且这四个类注解的源码也大致相似。这五大类注解都是将对象存到Spring中。

使用类注解存储Bean的命名规则

🔑一开始在spring-config.xml配置文件中使用的是bean标签中的id属性定义的bean的名称,后来使用了base-package后跟一个包名,来扫描这个包下需要添加到Spring中的对象,这时候bean的名称就默认是类名的首字母小写。那下面我们通过源码来具体分析一下bean名称的具体命名规则

image-20221128113419707

✅如果类名的第一个和第二个字母都是大写,则Bean的名称就是类名,否则的话就将类名的第一个字母转为小写即为Bean名称。

✅通过分析源码发现,Introspector是jdk中的一个类,说明是Spring调用了Jdk中的方法

方法注解

类注解是使用在类上的,而方法注解是使用在方法上的。方法注解是@Bean。

1️⃣User类:

package bit.controller;

public class User {
   
    private int id;
    private String name;
    private int age;

    public int getId() {
   
        return id;
    }

    public void setId(int id) {
   
        this.id = id;
    }

    public String getName() {
   
        return name;
    }

    public void setName(String name) {
   
        this.name = name;
    }

    public int getAge() {
   
        return age;
    }

    public void setAge(int age) {
   
        this.age = age;
    }
}

2️⃣UserController类:

package bit.controller;

import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Controller;

@Controller
public class UserController {
   
    @Bean
    public User user1(){
   
        User user = new User();
        user.setAge(18);
        user.setId(1
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值