1、基本概念

Spring:

  • 开源的轻量级的java开发框架,目的是提高开发人员的开发效率以及系统的可维护性。
  • 核心功能是支持IOC(控制反转)和AOP(面向切面编程)
  • 可以很方便地对数据库进行访问、可以很方便地集成第三方组件(电子邮件,任务,调度,缓存等等)、对单元测试支持比较好、支持 RESTful Java 应用程序的开发。
  • 是很多模块的集合:包括core-container(spring-core、spring-beans)、AOP(spring-aop、spring-aspects)、data access(spring-jdbc、spring-orm)、spring web(spring-web、spring-mvc、spring-websocket)、messaging、spring test

 2、IOC

  • 思想:IoC 的思想就是将原本在程序中手动创建对象的控制权,交由 Spring 框架来管理。这样可以实现类与类之间的松散耦合,这样在手动创建一个对象的时候就不需要关心其依赖对象的构造方法。
  • 具体实现:将对象之间的相互依赖关系交给 IoC 容器来管理,并由 IoC 容器完成对象的注入。使用xml或者注解将某类配置为bean,使用@autowired注解就可以实现依赖注入。

(1)IoC 容器:实际上就是个 Map(key,value),Map 中存放的是各种对象。

IOC容器主要作用有以下几个方面:

  1. 实现依赖注入(Dependency Injection,DI):指的是应用程序在运行时依赖IOc容器来动态注入组件所需要的某个依赖对象。Spring 的DI具体就是通过反射实现注入的,反射允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性等。

     

  2. 管理Bean的生命周期:IoC容器负责创建、初始化、销毁Bean对象,并缓存Bean实例,以提高性能和降低资源消耗。

(2)spring bean:Bean 代指的就是那些被 IoC 容器所管理的对象。

Java Bean主要用于表示实体对象、业务逻辑对象、数据访问对象等,并且广泛应用于Java EE和桌面应用程序中。在Spring框架中,Bean是指被IoC容器管理的对象实例,常见的Bean类型包括Service、Dao、Controller等。

(3)声明为bean的注解有

  • @Component:通用的注解,可标注任意类为 Spring 组件。如果一个 Bean 不知道属于哪个层,可以使用@Component 注解标注。
  • @Repository : 对应持久层即 Dao 层,主要用于数据库相关操作。
  • @Service : 对应服务层,主要涉及一些复杂的逻辑,需要用到 Dao 层。
  • @Controller : 对应 Spring MVC 控制层,主要用于接受用户请求并调用 Service 层返回数据给前端页面。

(4)@Component和@bean的区别:

  • @Component 注解作用于类,而@Bean注解作用于方法。
  • @Component通常是通过类路径扫描来自动侦测以及自动装配到 Spring 容器中(我们可以使用 @ComponentScan 注解定义要扫描的路径从中找出标识了需要装配的类自动装配到 Spring 的 bean 容器中)。@Bean 注解通常是我们在标有该注解的方法中定义产生这个 bean,@Bean告诉了 Spring 这是某个类的实例,当我需要用它的时候还给我。
  • @Bean 注解比 @Component 注解的自定义性更强,而且很多地方我们只能通过 @Bean 注解来注册 bean。比如当我们引用第三方库中的类需要装配到 Spring容器时,则只能通过 @Bean来实现。