Spring(4)--注解开发
前面说了,使用xml文件开发。有没有更简便的方法呢?
就是使用注解开发,原理一样,不过简化开发流程。坏处就是耦合性增加了
在Spring常用的注解有几种:
- @Required
- @Autowired
- @Primary
- @Value
- @Primary
- @PostConstruct
- @PreDestroy
一、使用的前置条件
首先,需要maven的文件结构配置如下,才能使用注解。
1.1需要导入相关xmls约束和context:annotation-config/支持
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
</beans>
1.2 aop支持
在Spring4.0以后,需要导入aop的包
1.3 扫描包
指定要扫描的包
<context:component-scan base-package="类的路径">
二、@Autowired
2.1 自动导入的功能
通过bean中id、name的值,找到class文件中对应属性。
autowired对应xml中4中情况,
但是autowired无需写以下4种情况,而由系统自动识别。
| Mode | Explanation |
|---|---|
| no | 无操作 |
| byName | 会在上下文中查找,找到和自己对象setter函数后那么一致的name值,然后赋值 |
| byType | 会在上下文中查找,找到和自己对象setter函数后那么一致的类型,然后赋值 |
| constructor | 根据构造器名字查找 |
实际上autowired的配置方法如下:
package com.pojo;
import org.springframework.beans.factory.annotation.Autowired;
public class Hello {
@Autowired(required = false)
private Cat cat;
private Dog dog;
private String str;
public String getStr() {
return str;
}
public Cat getCat() {
return cat;
}
public void setCat(Cat cat) {
this.cat = cat;
}
public Dog getDog() {
return dog;
}
@Autowired
public void setDog(Dog dog) {
this.dog = dog;
}
}
对应xml文件内的
<bean id="hello" class="com.pojo.Hello">
<property name="dog" value="狗"/>
</bean>
2.2 @Qualifier
配合@Autowired使用,在自动装配环境比较复杂的时候,可以自己强制指定唯一的bean对象
使用情况:
- 无法通过name查找
- 无法通过类型查找
- 无法通过构造器找到
<bean id="hello" class="com.pojo.Hello">
<property name="dog11" value="狗"/>
<property name="dog22" value="狗"/>
</bean>
对应
@Autowired
@Qualifier(value="dog22")
private Dog dog;
2.3 @Resource
功能与@Autowired一模一样,用于自动装配
区别:
| @Autowired | @Resource |
|---|---|
| 通过ByName的方式实现,找不到就报错 | 默认ByName的方式实现,找不到在通过ByType方式实现,都找不到才报错! |
三、@Component
用于加载class文件,简写了
先在xml文件中添加如下代码:
<context:component-scan base-package="com.pojo">
<context:annotation-config/>
再在com.pojo包下的class文件中添加@Component,然后在对应的属性中,使用@value赋值,就完成了加载
等价于:===
<bean id="hello" class="com.pojo.Hello">
<property name="dog11" value="狗"/>
<property name="dog22" value="狗"/>
</bean>
其实,之后的Spring演化出几个功能
@configuation
@service
@controller
@view
四、@Value
赋值语句

浙公网安备 33010602011771号