主pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.ming</groupId>
<artifactId>springstudy</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>spring-01-ioc1</module>
<module>spring-02-hello</module>
<module>spring-01-ioc2</module>
<module>spring-03-ioc2</module>
<module>spring-04-di</module>
<module>spring-05-Antowired</module>
</modules>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.codehaus.groovy</groupId>
<artifactId>groovy</artifactId>
<version>2.4.9</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
</dependency>
</dependencies>
</project>
自动注解
<?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
https://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/>
- 直接在属性上使用即可,使用Autowired,我们可以不用编写set方法了。前提是你这个自动装配的属性在IOC(Spring)容器中存在,且符合名字byName
@Autowired
private Dog dog;
@Autowired
private Cat cat;
如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解完成的时候,我们可以使用@Qualifier去配置一个@Autowired的使用,指定一个唯一的bean对象
@Autowired(required = false)
@Qualifier(value = "dog232")
private Dog dog;
<bean id="dog232" class="com.kuang.pojo.Dog"/>
<bean id="dog" class="com.kuang.pojo.Dog"/>
- Java原生的@resource注解更加厉害,先通过名字取选择,如果名字找不到就按照类型找,并且不用导入第三方约束,当出现复杂环境了,可以在@resource(name = “名字”)后指定
- 小结:
@resource和@Autowired的区别:
- 都是自动装配的,都可以放在属性字段上
- @Autowired通过byType的方式实现,而且要求这个对象必须存在
- @resource默认通过byName的方式实现,如果找不到名字,则通过byType方式实现
- 拓展
@Nullable 字段标记了这个注解,说明这个字段可以为null
public people(@Nullable String name) {
this.name = name;
}