首先,回顾一下Spring框架的核心思想之一:控制反转(Inversion of Control,IoC)
- 控制反转
- 通过IoC容器管理组件
- 依赖注入(Dependency Injection,DI)
- 组件间的依赖通过IoC容器自动装配
项目目录结构
项目环境搭建
- 在父工程
spring-annotation
的pom.xml文件中通过dependencyManagement
标签管理spring-context、lombok等依赖的版本
<?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.codermyu</groupId>
<artifactId>spring-annotation</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<modules>
<module>demo-one</module>
</modules>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
</dependency>
</dependencies>
</dependencyManagement>
</project>
- 在子工程
demo-one
的pom.xml文件中导入spring-context、lombok等依赖
<?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">
<parent>
<artifactId>spring-annotation</artifactId>
<groupId>com.codermyu</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>demo-one</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
- 在bean包下创建实体类Person
package com.codermyu.bean;
import lombok.*;
/** @author Mingyu */
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@ToString
public class Person {
private String name;
private Integer age;
}
- 在config包下创建配置类MySpringConfig
package com.codermyu.config;
import com.codermyu.bean.Person;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/** @author Mingyu */
@Configuration
public class MySpringConfig {
@Bean
public Person person() {
return new Person("Tom", 18);
}
}
- 创建启动类App
package com.codermyu;
import com.codermyu.bean.Person;
import com.codermyu.config.MySpringConfig;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
/** @author Mingyu */
public class App {
public static void main(String[] args) {
/**
* 通过AnnotationConfigApplicationContext读取配置类并创建IoC容器
* IoC容器在启动时会调用配置类中的person()方法,并将方法返回的组件注册到IoC容器中
*/
ApplicationContext applicationContext =
new AnnotationConfigApplicationContext(MySpringConfig.class);
Person person = applicationContext.getBean("person", Person.class);
System.out.println(person);
}
}