• 五大类注解和方法注解详解


    五大类注解为@Controller,@Service,@Repository,@Configuration,@Component,方法注解为@Bean。
    需要注意的是:@Bean注解必须要在类注解修饰的类内才能正常使用。

    一、与配置文件的关系

    • 在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">
        <content:component-scan base-package="com.java.demo"></content:component-scan>
    </beans>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 在spring Boot项目中
      不需要自己配置了,在spring Boot项目中,默认的扫描路径java文件夹的com.example.demo路径下。也可以使用@ComponentScan指定要扫描的包路径,如下:
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.context.annotation.ComponentScan;
    
    @SpringBootApplication
    @ComponentScan(basePackages = "com.example") // 指定要扫描的基础包路径
    public class MyApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MyApplication.class, args);
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    二、直接装入spring容器的Bean的id

    • 默认情况
      • 类注解
        默认情况下,五大类注解导入容器中的Bean对象的id是类名的首字母由大写改为小写。这个名称是在源码中由一个方法决定的,名称的变化依据为:如果类名首字母为大写,且类名第二个字母不为大写,则Bean的名称就是类名的首字母小写。
        在这里插入图片描述
      • 方法注解
        方法注解添加的Bean的默认id为,方法的名称。

    但是除了默认名称之外,在使用注解的时候还可以自己设置Bean的名称。

    • 设置别名
      • 五大类注解设置别名
        五大类注解在使用时,可以通过设置Value属性的方法来设置别名,设置别名之后,默认名称就不可用了。下面是@Controller注解设置别名例子,其他类注解也是这样设置;

        @Controller(value="User")
        public class User {
            @PostConstruct
            public void test(){
                System.out.println("User的前置方法");
            }
        }
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
      • 方法注解设置别名
        方法注解设置别名,可以设置name和value两个参数,并且方法注解的别名可以设置多个,也就是参数可以设置成String数组。设置了别名后,默认名称也不可用了。

        @Bean(name={"users","users2"})
        public User getUser(){
            return new User();	
        }
        
        • 1
        • 2
        • 3
        • 4

    三、五大类注解之间的关系

    查看@Controller,@Service,@Repository,@Configuration的源码可以发现,这四个类注解都是继承自@Component注解。这五大类注解的作用都是将修饰的类装入spring容器中。那么,为什么要有五大类注解呢?

    主要是五大类注解装入的Bean对象的功能不同,程序员设置不同的注解去装入,以此来标记不同功能的Bean对象。
    @Controller层:表示业务逻辑层,Http请求首先会进入到这一层,也可以说这一层装入的Bean对象应该用来处理业务逻辑。
    @Service层:服务层
    @Repository层:持久层,这一层的Bean对象应该是用来操作数据库的Bean对象。
    @Configuration层:配置层,这一层的Bean对象应该用来配置一些属性,比如之后的拦截器对象,就可以作为这一层的Bean对象。通过注入到拦截器列表中,实现对请求的拦截检查。
    @Component层:组件层,不符合上面四个作用的Bean对象,就可以放在这一层。

  • 相关阅读:
    React 详解
    智能中控屏:产品介绍+未来发展趋势详解
    HTML页面在iPhone中电话号码自动检测带来的布局问题
    确定谁在往mysql的某张表中写入数据
    [paddle]paddleseg中eiseg加载模型参数的模型下载地址
    使用 C 语言快速排序将字符串按照 ASCII 码升序排列
    shell之常用小工具(sort、uniq、tr、cut)
    Java中stream是什么?有什么作用?如何使用?
    浪涌防护器件要选对,布局布线更重要!|深圳比创达电子EMC(上)
    [网鼎杯 2018]Comment
  • 原文地址:https://blog.csdn.net/qq_61925446/article/details/132718028