使用注解配置需要引入xml文件约束条件
<?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
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
</beans>
我们需要配置的就是context标签,用来告知创建容器时要扫描的包,然后spring会扫描该包和其子类包中的注解,然后创建对象
注解配置分为四类
1、用于创建对象的注解
@Component
该注解的作用就和再xml配置文件中的bean标签的作用时一样的,就是用于把当前类对象存入spring容器当中
查看该注解的源码发现,有一个value属性
该value属性用于指定bean的id,当我们不写的时候,它默认值是当前类名并且首字母小写
@Controller和@Service还有@Repository
这三个注解的作用与@Component
的作用一模一样,他们三个时spring框架为我们提供明确的三层架构的使用的注解,是我们的三层对象更加清晰。@Controller
注解一般用于表现层、@Service
注解一般用于业务层、@Repository
一般用于持久层
2、用于注入数据的
@Autowired
自动按照类型注入。只要容器中有唯一的一个bean对象和要注入的变量匹配就可以注入成功,如果ioc容器中没有任何bean的类型和要注入的变量类型匹配,则报错。使用位置可以用于变量上也可以用于方法上,并且当我们使用注解注入的时候,set方法就可以不用了
当我们使用该注解修饰成员变量,
如果要注入的类型在ioc容器中有重复的bean类型对象时,
第一个id为accountDao的bean对象
第二个id为accountDao2的bean对象
如果我们的变量名称和ioc容器中存放的bean类型对象的id相同的话,则注入相同的,
如果变量名和重复的bean类型对象的id 都不相同的话,则报错
当我们出现这样的编译错误的时候,引出了我们的@Qualifier
注解
@Qualifier
按照类型作用的基础之上,再按照名称注入。它在给类成员注入时不能单独使用。但是再给方法参数注入时可以单独使用
value属性:用于指定注入bean的id
示范给参数注入时
由于这样的方式,稍微有些麻烦,所以我们引入一个新的注解
@Resource
该注解可以直接按照bean的id注入,它可以独立使用,不用依托于@Autowired
注解
它有一个name属性,该属性用于指定bean对象的id
中间出了一个小插曲,我在使用该注解的时候,发现没有该注解(一直红色)这时候我们只需要导入以下依赖就行
<dependency>
<groupId>javax.annotation</groupId>
<artifactId>javax.annotation-api</artifactId>
<version>1.2</version>
</dependency>
以上三个注解注入都只能实现其他bean类型的注入,而基本类型和String类型无法使用上述注解实现,另外集合类型的注入只能通过xml来实现
@Value
用于注入基本类型和String类型的数据
属性value用于指定数据的值。
它还可以使用spring中的SpEl(spring中的el表达式):SpEL的写法为${表达式}
@Scope
用于指定bean的作用范围
属性:value,指定范围的取值,常用的取值为singleton、prototype,如果不写默认为singLeton
@PreDestory
用于指定销毁方法
@PostConstruct
用于指定初始化方法