大家好,欢迎来到IT知识分享网。
点击上方 Java学习之道,选择 设为星标
环境
在 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学习-进阶手册》
公众号后台回复「手册」获取资料
▽加我微信,交个朋友长按/扫码添加↑↑↑
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/15597.html