spring 采用分层架构,根据不同的功能被划分为多个模块1)Data Access2) Web 模块3) Core Container (核心容器)
IoC 是指程序开发中,实例的创建不在由调用者管理,而是由 Spring 容器创建, Spring 会负责控制程序之间的关系,而不是有程序代码直接控制,因此,控制权由 程序代码转移到了 Spring 容器中,控制权发生了反转,这就是 Spring IoC 思想*
Spring 提供了两种 IoC 容器:*
BeanFactory:*
BeanFactory beanFactory = new XmlBeanBeanFactory(new FileSystemResource("XXX.xml"))** ApplicationContext ac = new ClassPathXmlApplicationContext(String configLocation);** 二者的区别在于,如果 Bean 的某一属性没有注入,使用 BeanFactory 加载后,getBean()会抛异常* 而 ApplicetionContext 会在初始化时自检,这样有利于检查所依赖的属性是否注入* 在实际开发中,通常使用 ApplicationContext
当某个 Java 实例需要另一个 Java 实例时,传统的方法是由调用者创建被调用者的实例(例如,使用 new 关键字获得被调用者实例),而使用 Spring 框架后,被调用者的实例不再由调用者创建,而是由 Spring 容器创建,这称为控制反转。
spring 容器在创建被调用者的实例时,会自动将调用者需要的实例注入给调用者,这样,调用者通过 Spring 容器获得被调用者的实例,这称为依赖注入
属性 setter 注入
构造方法注入
spring 容器在创建一个 Bean 实例时,同时会指定该实例的作用域
1) singleton
单例模式,spring默认作用域
通常情况下:
这种单例模式对于在无回话状态的 Bean (如Dao、Service 层)来 说,是最理想的选择
2)prototype
原型模式,每次通过 Spring 容器获取 prototype 定义的 Bean 时,容器都将创建一个新的 Bean 实例
需要保持会话状态的 Bean
3)request
4)session
5)global session
Java 1.5 后,提供而注解 Annotation功能
Spring3 定义了一系列的 Annotation
常用的注解如下:
1、@Component
2、Repository
3、Service
4、Controller
5、@Autowired
6、@Resource
其作用与 Autowired 一样,其区别在于 @Autowired 默认按照类型配置,而 @Resource 默认按照 Bean 实例名称进行装配
@Resource 中有两个重要属性:name 和 type。
Spring 将 name 属性解析为 Bean 实例名称,type 属性解析为 Bean 实例类型。如果指定 name 属性,则按实例名称进行装配;如果指定 type 属性,则按 Bean 类型进行装配。
如果都不指定,则先按 Bean 实例名称装配,如果不能匹配,则再按照 Bean 类型进行装配;如果都无法匹配,则抛出 NoSuchBeanDefinitionException 异常。
7、@Qualifler
原文:https://www.cnblogs.com/jcjc/p/13214881.html