八、使用注解开发
在Spring4之后,要使用注解开发,要保证aop的包导入了。
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc/artifactId> <version>5.3.9</version> </dependency>
使用注解要导入context约束;增加注解的支持。
<?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" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd"> <!--开启自动注解的支持--> <context:annotation-config/> </beans>
1. bean
// 等价于 <bean id="user" class="com.hxl.pojo.User"/> //@Component 组件放在类上,说明这个类被Spring管理了,这就是bean @Component public class User { public String name = "王木木"; }
2.属性如何注入
// 等价于 <bean id="user" class="com.hxl.pojo.User"/> //@Component 组件 @Component public class User { //简单的可以用这个,复杂的还是用配置好 //相当于<property name="name" value="王木木"/> //注解在set方法上也是可以的 @Value("王木木") public String name; public void setName(String name) { this.name = name; } }
3.衍生的注解
@Component 有几个衍生注解,我们在web开发中,我们会按照mvc三层架构分层。
- dao【@Repository】
- service【@Service】
- controller【@Controller】
这四个注解功能是一样的,都是代表将某个类注册到Spring中,装配到Bean
4. 自动装配
- @Autowired:自动装配通过类型,名字。如果Autowired不能唯一自动装配上属性,则需要通过@Qualifier(value=“xxx”)
- @Nullable:字段标记了这个注解,说明这个字段可以为null
- @Resource:自动装配通过名字,类型
5.作用域
单例模式,原型模式。
@Component //这个就是单例模式 @Scope("singleton") public class User { @Value("王木木") public String name; public void setName(String name) { this.name = name; }
6.小结
- xml与注解
- xml更加万能,适用于任何场合,维护简单方便
- 注解:不是自己类使用不了,维护相对复杂。
- 最佳实践
- xml用来管理bean
- 注解只负责完成属性的注入
- 我们在使用的过程中,只需要注意:必须让注解生效,就需要开启注解的支持。
<!--指定要扫描的包,这个包下的注解就会生效--> <context:component-scan base-package="com.hxl.pojo"/> <!--开启自动注解的支持--> <context:annotation-config/>