一、 简介
- 应用形式
- 基于浏览器的 web 应用,后端由关系型数据库支撑
- 面向云的由微服务组成的应用
- 反应式编程
二、 相关术语
1. Spring 应用上下文/ container 容器
- 创建和管理组件
2. bean 组件
- bean 是由 Spring 容器创建、组装和管理的对象
- 在 Spring 应用上下文中装配到一起,从而形成完整的程序
疑惑:以 bean 的形式添加到 Spring 的应用上下文?
- 这句话的意思是,如果在该方法上使用 @bean 注解,该方法的返回对象会被实例化,并注册为一个可由 Spring 容器管理的 bean
- 要将一个对象以bean的形式添加到Spring上下文,可以使用以下方法之一:
- 使用@Component注解
- 在类级别上使用@Component注解(或其派生注解,如@Service、@Repository等),将该类标记为一个组件,并由Spring自动扫描并将其实例化为一个bean
- 使用@Configuration和@Bean注解:
- 在一个配置类中使用@Configuration注解,然后在方法级别上使用@Bean注解,将方法的返回值作为一个bean添加到Spring上下文中
- 使用XML配置文件:
- 在XML配置文件中定义一个bean元素,指定该类的全限定名,并配置相应的属性和依赖关系
3. 依赖注入 DI 与 控制反转 IOC
- 在 Spring 环境下是同等的概念,IOC 是通过 DI 实现的;所谓 IOC 是指:将对象的创建和依赖关系的管理交给外部容器,降低耦合,提高 可重用性 和 可维护性
- 例如:controller 层 需要调用 service 层的方法,之间具有依赖关系,那么在 spring 框架中,只需要等待框架将 service 层的对象传入 controller 层中即可,无需自己去获取
-
# 不使用依赖注入 public class UserService { private UserRepository userRepository; // 需要自行创建依赖对象 UserRepository public UserService () { userRepository= new UserRepository (); } public void test(User user) { userRepository.save(user); } }
-
# 使用依赖注入 // 1. 构造函数注入 public class UserService { private UserRepository userRepository; // 通过构造函数注入依赖 UserRepository public UserService(UserRepository userRepository) { this.userRepository= userRepository; } public void test(User user) { userRepository.save(user); } } // 2. setter方法注入 public class UserService { private UserRepository userRepository; // 通过setter方法注入依赖 UserRepository public void setDependency(UserRepository userRepository) { this.userRepository= userRepository; } public void test(User user) { userRepository.save(user); } } // 3. 接口注入 public interface DependencyInjector { void setDependency(UserRepository userRepository); } public class UserService implements DependencyInjector{ private UserRepository userRepository; @Override public void setDependency (UserRepository userRepository)}{ this.userRepository= userRepository; } public void test(User user) { userRepository.save(user); } } // 4. 注解注入 public class UserService { @Autowired private UserRepository userRepository; public void test(User user) { userRepository.save(user); } }
- 注入:即是对所依赖的成员变量赋值
- 所使用/依赖的 service 层的对象需要在 controller 层创建之前就被创建好
- 其赋值方式分为
- 手动注入
- 构造函数:在类的构造函数中传入依赖对象
- set 属性:在类中新建 setter 方法,用于传入依赖对象
- 接口注入:在类中定义一个接口,并声明传入依赖对象的方法,然后在该类中实现此接口
- 自动注入
- 使用注解:@Autowired, @Resource 来标记需要注入的依赖对象
- 手动注入