Spring

一、 简介

  • 应用形式
    • 基于浏览器的 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 来标记需要注入的依赖对象

4. 自动装配和组件扫描

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值