注解方式相较于XML方式更方便

各有什么优缺点?分别应用于什么场景?

注解的使用:

1、导包

在pom.xml中引入Spring-aop依赖,因为Spring的注解是通过aop来实现的

<dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>5.1.5.RELEASE</version>
    </dependency>

2、开启注解的包扫描(大大减少applicationContext.xml配置的代码量)

(1)引入命名空间及文件

一个xml要有效的话,有两种方式:①DTD②Scheme

(自动生成的是Scheme的方式)

需要用到context的命名空间(默认是没有的)

故要引入一个新的命名空间以及2个新的Scheme的文件

spring bean继承注解怎么写 spring bean注解方式_java

xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd

可能出现的错误

(正常来说这样是ok的,但是,我出现了Ignored XML validation warning的错误,经过一番查找,于是乎,发现要把上图中最后一行的https改成http才能使注解成功运行。。。目前还不清楚原因)

 (2)编写代码开启

扫描base-package中的所有的注解

<context:component-scan base-package="org.csu.spring.demo.ioc"/>

3、使用注解

(1)@Component:一个组件,用来声明,注解某一个类是个Bean,需要容器来进行管理,相当于Bean的定义

如果没有@Value(注入值方式的注解)的话,account各属性的值就是默认的null或0

spring bean继承注解怎么写 spring bean注解方式_spring bean继承注解怎么写_02

一个类被Component注解,是一个普通的Java类

@Component的子注解有以下三种:

①@Controller

一个类被其注解,Spring-IoC会把它认为是Servlet,一个控制器

②@Repository

一个类被其注解,Spring-IoC会把它认为是DAO层的一个类

③@Service

 一个类被其注解,Spring-IoC会把它认为是业务层的一个类

(在面向接口的方式下,注解要写在实体类上,不要写在接口上面)

(2)注入对象的注解

①@Autowired:自动注入按类型去搜索,可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。

不适合有多种类型的情况

当搜索不到时,它可能把null值放进去

②@Resource(name=“accountDAO”):按名称去指定(不写括号中的内容也可以实现)

补充:Spring和junit的test一起使用时可以简化

1、在pom.xml中导入用于测试的包

spring bean继承注解怎么写 spring bean注解方式_spring bean继承注解怎么写_03

 2、修改测试类中的代码

加入如下两条注解

spring bean继承注解怎么写 spring bean注解方式_后端_04

用于替换

spring bean继承注解怎么写 spring bean注解方式_java_05

而原先需要context怎么办呢?

spring bean继承注解怎么写 spring bean注解方式_spring_06

 

解决方法:再次添加注解

spring bean继承注解怎么写 spring bean注解方式_spring bean继承注解怎么写_07

即可直接使用accountService,此时可以将 上上图中的语句省去