给我十分钟让你get Spring注解开发!!

Java学习之道

共 6497字,需浏览 13分钟

 · 2021-02-24

点击上方 Java学习之道,选择 设为星标

每天18点,干货准时奉上!


环境

在 Spring4 之后,要使用注解开发就必须依赖于 aop 的包。

使用注解需要导入 context 约束,增加注解支持。


<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
        https://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.javastudyway.pojo"/>
    
    <context:annotation-config/>

beans>

POJO 类 User

package com.javastudyway.pojo;
public class User {
    public String name = "全家桶";
}

@Component

@Component:组件,放在类上说明这个类被 Spring 所管理,即该类是一个 bean。

如果我们使用配置文件来配置 bean,则定义完 POJO 类后就要在配置文件中去配置 bean 并注入属性。而 @Component 注解便可以省去很多步骤,使该 bean 直接就能够被获取到。

package com.javastudyway.pojo;
import org.springframework.stereotype.Component;
public class User {
    /* 
     * 该注解类似于:
     *   
     */

    @Component
    public String name = "全家桶";
}

但是正常情况下,我们都不会在定义的时候直接给出值,而是在后面的操作中注入。这时候就要用到 @Value("xxx")

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class User {
    /*
     * @Value注解的作用类似于
     * 在 中的
     * 
     */

    @Value("Java学习之道")
    public String name;
}

相比使用 ,使用 @Value 还可以省略 setter,代码更加简洁。

@Value 也可以在 setter 上使用

而这一次获取到的 bean 结果便为:

虽然使用注解来注入值很简便,但是遇到了复杂属性还是建议通过配置文件来处理属性的注入。一来更为方便快速,二来更为清晰。

衍生注解

由 @Component 衍生出来了三个注解,在 web 开发中, 我们会按照 mvc 三层架构来分层,而这三个注解便对应于这三个层。

  • @Repository,对应于Dao 层;
  • @Service,对应于Service 层;
  • @Controller,对应于Controller 层。

无论是 @Component 还是衍生的这三个注解,作用都是相同的,都是「代表将本类交由 Spring 托管,只是各层所使用的注解名字不同」

自动装配

  • @AutoWired:自动装配注解,类似于 byName 的装配方式。

  • @Qualifier:如果 AutoWired 不能唯一自动装配上属性,则需要通过 @Qualifier(value = "xxx")。

  • @Nullable:字段标记这个注解,说明这个字段可以为 null。

作用域

@Scope,控制 bean 的作用域。下面的 @Scope 注解的源码:

public @interface Scope {
    @AliasFor("scopeName")
    String value() default "";

    @AliasFor("value")
    String scopeName() default "";

    ScopedProxyMode proxyMode() default ScopedProxyMode.DEFAULT;
}

可以看到 @Scope 有一个参数,这个参数便是 bean 的作用域。

  • 单例 -- singleton
  • 原型 -- prototype
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;

@Component
/* 控制该 bean 为单例 */
@Scope("singleton")
public class User {

    @Value("Java学习之道")
    public String name;
}

总结

XML 与 注解比较:

  • xml 更为万能,适用于任何的场景,维护相对较为方便
  • 注解只能在自己的类中使用,维护相对较为复杂

XML 与 注解如何搭配?xml 用来管理 bean,注解只负责完成属性的注入

使用注解的时候一定要注意开启注解的支持。



<context:component-scan base-package="com.javastudyway"/>

<context:annotation-config/>
-- END --

 | 更多精彩文章 -



《Java学习-进阶手册》

众号后台回复「手册」获取资料

   
          
加我微信,交个朋友
         
长按/扫码添加↑↑↑
                

浏览 21
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报