loc (控制反转) 概念
控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责,这样控制权就由应用转移到外部容器,控制权的转移就是所谓的反转 (控制权转移带来的好处就是降低了业务对象之间的依赖程度)
DI (依赖注入) 概念
依赖注入就是对象之间的依赖关系是在运行时动态注入的 (本质是利用Java 的反射机制)依赖注入分类构造器注入.方法注入.接口注入.
注: Spring 仅支持构造器注入和方法注入
什么是 loc 容器
loC 容器是 Spring 框架的核心 (Spring core) ,通过实现 C(控制反转) 和 DI (依赖注入) ,以降低类与类之间的依赖程度 (低合) ,从而奠定 Spring 框架的基石loc 容器 = 依赖注入 (loc) + 控制反转 (DI)什么是 Bean在loC 容器中创建的类实例统称为 Bean ( Spring 中使用 Bean 来表示应用组件)Spring 中使用 loC容器 (实现 loC) 来管理 Bean 的生命周期Spring 中使用 loc容器 (实现 DI) 来自动完成 Bean 与 Bean 的依赖关系
loc 容器三种创建方式
<1>ClassPathXmlApplication: 从类路径下的XML配置文件中加载上下文定义,把应用上下文定义文件当做类资源
<2>FileSystemXmIApplicationContext: 读取文件系统下的XML配置文件并加载上下文定义
<3>XmIWebApplicationContext: 读取Web应用下的XML配置文件并加载上下文定义
装配 Bean
装配 Bean 就是在loC 容器中创建 Bean (loC,控制反转)以及确定 Bean 与 Bean 之间的依赖关系(DI,依赖注入)Spring 支持三种装配 Bean 的方式
基于 XML 配置
基于注解
基于java 类配置
构造器注入 Bean
Spring loC 容器构造器注入 Bean 使用 元素,使 Spring loC 容器在实例化 Bean 时可以不调用默认构造器,而是调用有参构造器
注解装配 Bean
使用注解自动装配与在XML配置中使用 autowire 属性自动装配并没有太大差别 (Spring oC容器默认禁用注解装配 Bean)
@Autowired 注解: 可以用于标注 setter 方法,Spring 就会尝试对该方法执行 bvTvpe 自动装配:还可以用于标注需要自动装配 Bean 引用的任意方法: 还可以用千标注构造器,当创建 Bean时,即使在XML 文件中没有使用 元素配置Bean,该构造器也需要进行自动装配;还可以用于直接标注属性,则可以删除 setter 方法 (@Autowire 注解甚至不受限于private关键字,仍然可以被自动装配)
@Resource 注解: 与 @Autowired 完全相同,唯一区别是默认安装 byName 装配 Bean,失败则按照 byType 装配 Bean
@Qualifier 注解: 如果 Spring 有多个适合自动装配的Bean,@Autowired 注解由于无法选择哪个 Bean 才是真正需要的,这时 Spring 将自动装配失败并抛出异常,这种情况下可以使用@Qualifier 注解来明确指定需要自动装配的Bean
@Scope 注解: 可以用于设置 Bean 的作用域
@Value 注解:可以用于属性、方法和构造器,作用是设置 Bean 的基本类型属性值
@PostConstructor 注解: 可以用于设置 Bean 的初始化方法
@PreDestrov 注解: 可以用于设置 Bean 的销毁方法
自动检测
Spring loC 容器支持自动检测 Bean 和定义 Bean,在不使用 元素的情况下,Spring 应用中的大多数甚至所有的 Bean 都能够实现定义和装配
@Component
@Controller
@Repository
@Service
通用的构造器注解,标识该类为 SpringloC 组件(通用)
标识将该类定义为 Spring MVC 的 controller 页面控制器 (表现层)标识将该类定义为数据仓库(持久层)
标识将该类定义为服务 (业务层)