Spring注解开发
程序员文章站
2022-03-05 12:05:53
...
常用依赖
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.4.2</version>
<scope>test</scope>
</dependency>
1. 注解说明
-
@Autowired : 自动装配,通过类型,名字。
如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解@Autowired完成的时候,我们可以使用@Qualifier(value=“xxx”)去配置@Autowired的使用,指定一个唯一的bean对象注入!
public class People { @Autowired @Qualifier(value="dog11") private Dog dog; @Autowired @Qualifier(value="cat11") private Cat cat; private String name; }
-
@Nullable 字段标记了这个注解,说明这个字段可以为null。
-
@Resource: 自动装配,通过类型,名字。
-
public class People { @Resource(name = "cat2") private Cat cat; }
-
public class People { private Cat cat; }
-
-
@Component : 组件,放在类上,说明这个类被Spring管理了,就是一个Bean
2. 属性如何注入
//等价于 <bean id = "user" class = "com.shp.pojo.User">
//@Component 组件
@Component
public class User {
//相当于 <property name="name" value="商怀朋"/>
//@Value("商怀朋")也可以
public String name;
//相当于 <property name="name" value="商怀朋"/>
@Value("商怀朋")
public void setName(String name) {
this.name = name;
}
}
3. 衍生的注解
@Component 有几个衍生的注解,我们在web开发中,会按照MVC三层架构分层
- dao 【@Repository】 (仓库的意思)
- service 【@Service】
- controller【@Controller】
这四个注解功能是一样的,都代表将某个类注册到Spring容器中进行装配
4.自动装配注解
-
@Autowired : 自动装配,通过类型,名字。
-
@Nullable 字段标记了这个注解,说明这个字段可以为null。
-
@Resource: 自动装配,通过类型,名字。
5. 作用域
- @Scope 作用在类上 singleton:单例模式 prototype :原型模式
@Component
@Scope("singleton")
public class User {
//相当于 <property name="name" value="商怀朋"/>
//@Value("商怀朋")也可以
public String name;
//相当于 <property name="name" value="商怀朋"/>
@Value("商怀朋")
public void setName(String name) {
this.name = name;
}
}
6. 小结
xml 与 注解:
- xml更加万能,适用于任何场合!维护简单方便
- 注解,不是自己的类使用不了,维护相对复杂
最佳实践:
- xml用来管理bean
- 注解只用来用于属性的注入
- 我们在使用的过程中,只需要注意一个问题:必须让注解生效,导入相关支持
<!-- 指定要扫描的包,这个包下的注解就会生效 -->
<context:component-scan base-package="com.shp.pojo"/>
<context:annotation-config/>