Spring4之后,要是用注解开发,必须导入aop的包!!!
1.导入依赖:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring</artifactId>
<version>5.3.10</version>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.10</version>
</dependency>
</dependencies>
2.开启注解支持:
<?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: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:component-scan base-package="com.xxx"/>
<context:annotation-config/>
</beans>
3.注解说明:
1.bean:
@Component :组件,放在类上,说明这个类被Spring管理了,就是bean。
//相当于<bean id="xxx" class="com.xxx"/>
2.属性如何注入:
@Value("xx")
//相当于<property name="user" value="xx"/>
3.衍生的注解:
@Component有几个衍生注解,我们在web开发中,会按照MVC三层架构分层
dao:@Repository
service:@Service
controller:@Controller
这四个注解功能都是一样的,都是将某个类注册到Spring容器中,装配Bean。
4.自动装配:
@Autowired:自动装配通过byType,byName
如果Autowired不能唯一自动装配属性需要通过
@Qyalifier(value="xxx")
@Nullable 字段标记了这个注解,说明这个字段可以为null
@Resource 自动装配默认通过byName,然后是byType
@Resource和@Autowired的区别:
(1)都是用来自动装配的,都可以放在属性字段上。
(2)@Autowired通过byType的方式实现,而且必须要求这个对象存在。
(3)@Resource默认通过byName的方式实现,如果找不到名字,则通过byType实现
如果都找不到,就报错。
(4)执行顺序不同@Autowired自动装配通过byType,@Resource 自动装配默认通过 byName。
5.作用域:
@Scope("singleton")
//相当于<bean id="xx" class="com.xxx.." scope="singleton"/>
xml与注解:
xml:更加万能,适用于任何场合,维护方便;
注解:不是自己的类适用不了,维护相对复杂。
最佳实践:
xml用来管理bean;
注解用来负责属性的注入。
注意:必须让注解生效就必须开启注解支持!!!(详细见第2步)