0%

注解

依旧是个人知识梳理

spring入门第五节——注解替代xml文件

1.注解介绍

(1)注解是什么

注解是代码的特殊标记,格式:@注解名称(属性名称=属性值,属性名称=属性值…)。

(2)注解可以写在什么地方

注解可以写在类,方法,属性上。

(3)为什么要使用注解

简化xml,注解的写法比xml更简单。

(4)既然注解这么省力,为什么要学xml

学习xml是为了更方便理解注解的用法。

原味康师傅(宋红康老师)的笔记:

2.注解的配置

导入aop的jar包。之后也是经典的两个操作,创建对象和注入属性。

3.注解的创建对象

(1)创建context名称空间

具体见上一节。

(2)context的创建对象的注解

位置:写在类上方。

@Component用于普通类

@Service用于服务层

@Controller用于控制层

@Repository用于du层

这四个注解的实际功能是一模一样的,在普通层用Service,控制层用Component也是完全没有问题的,但是为了便于使用和区分,用不同的名称来表示它们在程序中的分类。

(3)打开注解扫描

在xml文件上写如下语句:

1
<context:component-scan base-package="spring5testcollection"></context:component-scan>

(4)进一步约束注解扫描

include-filter:

扫描的设置默认是base-package设置的目录下的所有文件,第一步先取消默认的全局扫描

1
use-default-filters="false"

然后用inclde-filter设置自己的扫描规则,type选择annotation(注解类型),表达式选择Component的包,这个语句的意思就是扫描目录下所有注解为Component的Bean类。

1
2
3
<context:component-scan base-package="spring5testcollection" use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Component"/>
</context:component-scan>

或者可以选择用exclude-filter从全局扫描中除外某些注解。

exclude-filter:因为是从全局扫描中除外,所以不用定义use-default-filters.

用exclde-filter设置自己的扫描规则,type选择annotation(注解类型),表达式选择Component的包,这个语句的意思就是全局扫描中除外所有注解为Component的Bean类。

1
2
3
<context:component-scan base-package="spring5testcollection">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Component"/>
</context:component-scan>

(5)在Bean类上标注解

@Component(value=””)等价于xml中的 <Bean id="" class=""></Bean>

其中value等价于Bean中的id,Component直接写在类的上方,所以不需要class属性

只写@Component的时候,value值默认为类的首字母小写的形式,举例:UserService,默认value值为userService

4.注解的属性注入

(1)能够注入属性的注解

写注解的位置:属性的上方

@Autowired等价于自动装配的byType,根据属性类型注入

@Qualified等价于自动装配的byName,根据属性名称注入。必须和Autowired一起使用。

@Resource不是spring提供的注解,是Java提供的注解,可以byType也可以byName,但是不鼓励使用这种注解

@Value手动注入普通值

(2)@Autowired

根据属性类型自动装配属性值

(3)@Qualified

根据属性名称自动装配属性值。

为什么要用@Qualified:因为接口可以有多个实现类,如果只靠属性类型自动装配,在接口的复数实现类中,@Autowired是无法选择某一个实现类的,所以需要@Qualified

3.1属性名称为trainer的UserDao接口的实现类

3.2通过@Qualified精确选择属性名称为trainer的接口的实现类

(4)@Resource

不熟

(5)@Value

写法:@Value(value=”属性值”)

5.完全注解实现(不在需要xml文件)

(1)设置注解的配置Java类,配置类需要有@Configuration和@Component-Scan,具体写法如下所示:

1
2
3
4
5
6
7
8
9
package spring5testcollection;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = {"spring5testcollection"})
public class config {
}

(2)Java类调用Bean类的写法变化(config.class是自己写的配置Java类)