使用spring基于注解的ioc需要在xml配置文件中增加导入context名称空间和约束(在spring官方文档—>core中搜索xmlns:context)。
并告知spring在创建容器时要扫描的包(配置所需要的标签不是在beans的约束中,而是名称为context的名称空间和约束中),即以下这行代码。其中包名是java文件夹的第一个包名。
<context:component-scan base-package="com.itmao"></context:component-scan>
-
用于创建对象的注解:Component,和在xml文件中写bean标签实现的功能是一样的。
-
作用:用于把当前类对象存入一个map容器中。
-
属性:value,用于指定bean的id,我们不写时,默认值是当前类名,但首字母小写。
*Component有三个子注解:Controller、Service、Repository,他们的作用和属性跟Component是一模一样的,是spring框架为我们提供的明确给三层使用的注解,可以使我们的三层对象更加清晰。
-
Controller:一般用在表现层
-
Service:一般用在业务层
-
Repository:一般用在持久层
*========================== -
用于注入数据的注解:他们的作用就和在xml文件的bean标签中写property标签的作用是一样的,在使用注解注入数据时,就不需要set方法了。
-
Autowired:自动按照类型注入。
-
机制:只要ioc容器中有唯一的一个bean对象类型和要注入的变量类型匹配,则注入成功。
-
如果ioc容器中没有bean对象类型和要注入的变量类型匹配,则注入失败。
-
如果ioc容器中有多个bean对象类型匹配时,若有bean对象的id与要注入的变量名相同则注入成功,否则注入失败。
-
Qualifier:在按照类型注入的基础上再按照名称注入,它在给类成员注入时必须与Autowired一起使用,在给方法参数注入时可以单独使用(直接在方法形参之前加上@Qualifier(“id”)即可)。
-
属性:value,用于指定注入bean的id。
-
Resource:直接按照bean的id注入,且可以单独使用。
-
属性:name,用于指定注入bean的id。
-
以上三个注解都只能注入其他bean类型的数据,而基本类型和String类型无法通过上述注解实现。
-
另外,集合类型的注入只能通过xml来实现。
-
Value:用于注入基本类型和String类型的数据。
-
属性:value,用于指定数据的值,它可以使用SpEl(即spring中的el表达式,格式也是:${表达式})
*==========================
- 用于改变作用范围的注解:Scope,作用和在bean标签中使用scope属性的作用是一样的。使用方法与创建对象的注解相同。
-
作用:用于指定bean的作用范围。
-
属性:value,指定范围的取值,常用的有singleton、prototype等。
*==========================
- 和生命周期相关的注解(了解):作用和在bean标签中使用init-method和destroy-method属性的作用是一样的。在方法名上使用。
- PostConstruct:用于指定初始化方法。
- PreDestroy:用于指定销毁方法。
以上可知,注解和xml配置文件能实现的功能是对应的,故只使用注解或者只使用xml配置文件,都可以做到控制反转。但我们应该二者结合使用,即对自己写的类使用注解,而别人写的类(jar包中的)使用xml文件配置显然更方便。