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

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

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

环境

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

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

<?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: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">

    <!-- 指定要扫描的包, 这个包下的注解就会生效,专门对spring生效 -->
    <context:component-scan base-package="com.javastudyway.pojo"/>
    <!-- 开启注解的支持,不一定spring的注解才能使用 -->
    <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 {
    /* 
     * 该注解类似于:
     * <bean id="user" class="com.javastudyway.pojo.User"/> 
     */
    @Component
    public String name = "全家桶";
}

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

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

@Component
public class User {
    /*
     * @Value注解的作用类似于
     * 在<bean>中的<property>
     * <property name="name" value="Java学习之道"/>
     */
    @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,注解只负责完成属性的注入

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

<!-- 指定要扫描的包, 这个包下的注解就会生效,专门对spring生效 -->
<!-- 如果用到刚刚说到的衍生注解,则需要扫描com.javastudy -->
<context:component-scan base-package="com.javastudyway"/>
<!-- 开启注解的支持,不一定spring的注解才能使用 -->
<context:annotation-config/>

-- END --

 | 更多精彩文章 -


《Java学习-进阶手册》

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

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

相关推荐
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值