依旧是个人知识梳理
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 | <context:component-scan base-package="spring5testcollection" use-default-filters="false"> |
或者可以选择用exclude-filter从全局扫描中除外某些注解。
exclude-filter:因为是从全局扫描中除外,所以不用定义use-default-filters.
用exclde-filter设置自己的扫描规则,type选择annotation(注解类型),表达式选择Component的包,这个语句的意思就是全局扫描中除外所有注解为Component的Bean类。
1 | <context:component-scan base-package="spring5testcollection"> |
(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 | package spring5testcollection; |