自学内容网 自学内容网

Spring IOC

1. Spring

        spring是一个开源的Java企业级应用开发框架,用于简化Java企业级应用的开发难度和开发周期。从简单性、可测试性和松耦合度的角度而言,任何Java应用都可以从Spring中受益。Spring框架提供自己提供功能外,还提供整合其他技术和框架的能力。

作用:

  • 降低耦合,简化开发。Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理。

  • AOP编程的支持。Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。

  • 声明式事务的支持。只需要通过配置就可以完成对事务的管理,而无需手动编程。

  • 方便程序的测试。Spring对Junit4支持,可以通过注解方便的测试Spring程序。

  • 方便集成各种优秀框架。Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、Mybatis、Quartz等)的直接支持。

  • 降低JavaEE API的使用难度。Spring对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低。

2. Spring IOC

        IoC(Inversion of Control,控制反转)是Spring框架的一个核心思想,实现了将类实例化的时机以及细节交给Spring来管理。

2.1 IOC的核心概念

  • 使用对象时候由主动new对象转换成由外部提供对象,此过程中对象的创建权由程序转移到外部,这种思想叫做控制反转
  • Spring技术对此提供的实现
    • Spring提供了一个容器,称为IOC容器,用来充当IOC思想中的外部
    • IOC容器负责对象的创建、初始化等一系列工作,被创建或被管理的对象在IOC容器中统称为Bean。

2.2 IOC的实现方式

  • DI-依赖注入
    在容器中建立bean与bean之间的依赖关系的整个过程叫做依赖注入,即所依赖的属性和对象都由外部传递,而非自己创建。

3. Spring Bean

        Spring Bean 是 Spring 框架中的核心概念之一。在 Spring 框架中,Bean 是由 Spring 容器创建并管理的对象。这些对象由 Spring 容器实例化、配置和组装,并且由 Spring 管理其生命周期。

        Bean 是构成Spring应用的基本单元,可以是任何Spring IOC容器管理的对象

3.1 Bean的实例化方式

  1. 使用构造函数: 通过调用类的构造函数来创建Bean实例。这可以通过XML配置或注解来实现。

    @Bean
    public MyBean myBean() {
        return new MyBean();
    }

  2. 使用静态工厂方法: 如果Bean的实例化逻辑位于一个静态工厂方法中,可以通过指定工厂方法来创建Bean。

    @Bean
    public MyBean myBean() {
        return MyBeanFactory.createMyBean();
    }

  3. 使用实例工厂方法: 如果实例化逻辑位于一个非静态的工厂方法中,可以通过指定实例工厂方法来创建Bean。

    @Bean
    public MyBean myBean(MyBeanFactory factory) {
        return factory.createMyBean();
    }
  4. 使用@Bean注解: 在Java配置类中,可以使用@Bean注解来声明一个Bean。

    @Configuration
    public class AppConfig {
        @Bean
        public MyBean myBean() {
            return new MyBean();
        }
    }
  5. 使用@Component注解: 通过在类上使用@Component注解,Spring会自动扫描并注册该类为Bean。

    @Component
    public class MyBean {
        // ...
    }
  6. 使用@Autowired注解: 在构造函数、字段或setter方法上使用@Autowired注解,Spring会注入依赖的Bean。

    @Component
    public class MyBean {
        private final DependencyBean dependencyBean;
    
        @Autowired
        public MyBean(DependencyBean dependencyBean) {
            this.dependencyBean = dependencyBean;
        }
    }

3.2 Bean的属性注入方式

  1. 构造函数注入: 通过构造函数参数来注入依赖的Bean。(有参构造、无参构造)

    @Component
    public class MyBean {
        private final DependencyBean dependencyBean;
    
        @Autowired
        public MyBean(DependencyBean dependencyBean) {
            this.dependencyBean = dependencyBean;
        }
    }
  2. Setter方法注入: 通过Setter方法来注入依赖的Bean。

    @Component
    public class MyBean {
        private DependencyBean dependencyBean;
    
        @Autowired
        public void setDependencyBean(DependencyBean dependencyBean) {
            this.dependencyBean = dependencyBean;
        }
    }

4. Spring注解管理 

  1. @Component: 将类标识为一个Spring管理的Bean。

  2. @Service: 通常用于服务层的类,是@Component的特化。

  3. @Repository: 通常用于数据访问层的类,是@Component的特化。

  4. @Controller: 通常用于表现层的类,是@Component的特化。

  5. @Configuration: 用于定义配置类,可以替代传统的XML配置文件。

  6. @Bean: 在配置类中使用,用于声明一个Bean。

  7. @Value: 用于注入外部配置的值,如来自properties文件的值。

  8. @Autowired: 用于自动注入依赖的Bean。

  9. @Qualifier: 当有多个相同类型的Bean时,用于指定注入哪一个。

  10. @Lazy: 用于延迟加载Bean。

  11. @Scope: 用于指定Bean的作用域。

  12. @PostConstruct: 用于在Bean创建后执行初始化代码。

  13. @PreDestroy: 用于在Bean销毁前执行清理代码。

  14. @Resource: 用于按名称自动注入Bean。

  15. @Inject: 用于自动注入Bean,是JSR-330标准。

  16. @Profile: 用于指定Bean在哪个或哪些环境下创建。

  17. @DependsOn: 用于指定Bean初始化的依赖顺序。

  18. @Primary: 当有多个Bean符合注入条件时,用于指定优先注入哪一个。

  19. @Lookup: 用于在Bean中执行自定义的方法查找逻辑。

  20. @RequestScope: 用于创建每个HTTP请求一个实例的Bean。

  21. @SessionScope: 用于创建每个HTTP会话一个实例的Bean。

  22. @ApplicationScope: 用于创建整个应用程序一个实例的Bean。

  23. @TaskScope: 用于创建每个异步任务一个实例的Bean。

  24. @Transactional: 用于声明事务管理。

  25. @Cacheable: 用于声明方法的结果是可缓存的。

  26. @CachePut: 用于声明方法的结果更新缓存。

  27. @CacheEvict: 用于声明方法的调用应该使缓存失效。

  28. @EnableAutoConfiguration: 用于告诉Spring Boot根据添加的jar依赖自动配置项目。

  29. @SpringBootApplication: 组合了@Configuration@EnableAutoConfiguration@ComponentScan

  30. @RestController: 组合了@Controller@ResponseBody

  31. @RequestMapping: 用于将HTTP请求映射到处理器方法。

  32. @GetMapping@PostMapping@PutMapping@DeleteMapping: 用于简化HTTP请求映射,分别对应HTTP的GET、POST、PUT、DELETE方法。

  33. @PathVariable@RequestParam@RequestBody@RequestHeader: 用于从HTTP请求中提取信息。

  34. @ResponseBody: 用于将控制器方法的返回值作为HTTP响应的正文。

  35. @RequestBody: 用于将HTTP请求正文绑定到方法参数。

  36. @EnableCaching: 用于开启基于注解的缓存管理功能。

  37. @EnableAspectJAutoProxy: 用于开启AspectJ的自动代理功能。

  38. @EnableTransactionManagement: 用于开启基于注解的声明式事务管理。


原文地址:https://blog.csdn.net/weixin_63314150/article/details/142690485

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!