Spring基本用法<一>:从Spring起源,bean的创建到IoC/依赖注入
来源:互联网 发布:网络社交的利与弊英语 编辑:程序博客网 时间:2024/05/16 12:42
Spring基本用法<一>:从起源到bean的创建
基本情况
Spring为企业应用开发提供了一个轻量级的解决方案。该解决方案包括:基于依赖注入的核心机制(IoC 控制反转),基于AOP的声明事务管理,与多种持久层耦合,优秀的前端MVC框架.
Spring框架的组成结构图:
Core Container部分是Spring的核心机制,为必不可少的。其他部分包括:JDBC,ORM,WEB,STRUTS都是可选的。从这也不难看出Spring是一个既可以提供一站式解决方案的框架,也是一个可以选择使用其中部分功能的框架,它保证了良好的模块化。
IoC 依赖注入
类间方法的互相调用有一个明显的历史演变过程。
直接在调用方中新建被调用对象,来获取方法—->调用者找到被调用者的工厂,依赖抽象的工厂接口来获得对象和方法—->调用者不再主动创建被调用的对象,而被是被动的接受Spring框架将需要的对象注入到调用者中
Spring框架将调用者获取被依赖对象的方式,由主动获取变为被动接受,这就是IoC 控制反转
从Spring的角度看,Spring负责将被依赖对象的实例赋值到调用者中,相当于为调用者注入它需要的实例,所以这种方式被称为依赖注入。
设值注入
通过在调用者中创建一个setter方法,用来传入被调用者的实例
bean语法
构造注入
通过在调用者的构造函数中传入被调用者的实例
bean语法
两种注入方式的比较:设值注入更容易理解,而且不会因为传入实例过多而使得函数臃肿,甚至导致性能下降;
构造注入可以决定依赖关系的注入顺序,无需担心对后面代码的破坏。建议采用设置为主构造为辅的策略。
使用Spring 容器
Spring的两个核心接口BeanFactory 和 ApplicationContext都可以创建容器并管理bean,但是大部分时候都不会把BeanFactory作为容器,原因是后者除了提供前者全部的功能外,还额外提供:
1.默认预初始化所有的singletion bean,当然也可以取消
2.它继承了MessagerSource接口,提供国际化支持
3.资源访问机制,比如URL和文件
4.事件机制:按照观察者模式设计,通过实现ApplicationEvent和ApplicationListener接口实现事件处理
5.同时加载多个配置文件
6.以声明式的方式启动被创建Spring容器
为了让bean获取Spring容器,可以让bean实现setBeanFactory接口
Spring容器中的bean
对于开发者来说,使用Spring框架主要干两件事。1.开发bean 2.配置bean
beans
理解beans根元素下不同属性的功能,包括:
default-lazy-init 延迟初始化,
default-merge 指定所有bean的默认行为 ,
default-autowire指定根元素下所有bean默认的装配行为,
default-autowire-candidates指定该元素配置下的所有bean默认是否作为自动转配的候选bean
default-init-method 指定所有bean的初始化方法
default-destory-method 指定所有bean的回收方法
bean
id:确定该bean在容器中的唯一标识
class:该类的完整限定名
name:指定名称/alias指定别名
bean的作用域
Spring支持:singleton prototype request seesion global session五个作用域,默认为singleton,即每个类在同一个容器中只创建一个实例,prototype指定每次都会创建一个新的实例,其他作用域依据名称可以判断
配置依赖
Spring允许通过如下元素为setter方法,构造器指定参数
value ref map props/list/set/map分别代表了bean类的四种成员变量,注入参数值根据各种类型的不同而有不同bean配置模式。
设置普通属性值
注入普通属性值,包括所有的基本类型和包装类
<bean id="id" class="..."> <property name="类成员变量名" value=“希望注入的值x”/> <property name="类成员变量名" value=“希望注入的值x”/></bean>
设置其他实例属性值
注入的属性值是容器中另外一个bean实例
<bean id="steelshit" class="bulabula"/><bean id="id" class="..."> <property name="被调用类成员的实例名" ref=“steelshit”/></bean>
使用自动装配注入合作者bean
自动装配可以直观的理解为:一种持有特定筛选对象和筛选函数的全容器bean实例遍历方法。主要的筛选方法有
- no,不进行筛选,即不使用自动装配,所有的依赖注入都通过ref标明
- byName,根据setter方法进行自动装配。去掉setter方法的“set”后作为筛选exp,去匹配容器中的其他bean
- byType,跟你讲setter的形参类型自动装配。如果有多个相同类型的bean实例,则抛出异常。如果未检测到相同类型的bean实例,则不进行注入
- contrutor,与byType类似。区别是contrutor应用于构造器函数的参数匹配
- autodetecet,Spring根据bean的内部结构自行决定使用byType或者constructor
注入嵌套bean
如果某个bean依赖的bean不想被Spring容器所访问(可能是有bean),可以把这个bean隐藏在property中
<bean id="id" class="..."> <property name="被调用类成员的实例名"> <bean class=""> </property></bean>
注入集合值
list set map 和 property都有自己的对应的bean语法
list
<bean id="id" class="..."> <property name="list/set"> <list/set> <value>小学</value> <value>中学</value> <value>大学学</value> </list/set> </property></bean>
property
<bean id="id" class="..."> <property name="somthing"> <props> <props key="王者荣耀">小学</props> <props key="穿越火线">中学</props> <props key="风暴英雄">大学学</props> </props> </property></bean>
map
<bean id="id" class="..."> <property name="somethingaboutthismap"> <map> <entry key="王者荣耀" value="小学"></props> <entry key="穿越火线" value="中学"></props> <entry key="风暴英雄" ref- value="大学学"></props> </map> </property></bean>
javabean和Springbean的区别
javabean主要作为DTO,永磊封装值对象,在各层之间实现数据传输(例如和持久层交互的dao)而Spring中的bean泛指所有位于Spring容器中的对象实例。javabean要求为所有的成员变量提供set和get方法,而Spring中的bean并不要求一定要为所有的成员变量提供set和get方法。
- Spring基本用法<一>:从Spring起源,bean的创建到IoC/依赖注入
- Spring的依赖注入IoC
- Spring ioc 的依赖注入
- Spring(一)之IOC、bean、注入
- spring ioc依赖注入
- spring IOC依赖注入
- spring ioc 依赖注入
- Spring IOC 依赖注入
- Spring IoC依赖注入
- Spring-IoC依赖注入
- 【Java.Spring.Core】【IoC】Bean依赖注入- Dependencies
- Spring:IOC释义(Bean容器、注解、依赖注入)
- Spring之依赖注入(IOC、DI)详解---配置Bean
- Spring IOC使用(1) bean的注入
- spring ioc中实例化bean以及依赖注入bean和基本类型属性简单实现方案
- Spring的 IOC 依赖注入方式
- Spring IoC依赖注入的实现
- spring的IoC初始化和依赖注入
- struts2重点、精华、用法总结(五):数据处理机制之原生OGNL表达式
- Java集合类总结4——==/equals/hashCode()/compareTo()
- Shiro第二篇【介绍Shiro、认证流程、自定义realm、自定义realm支持md5】
- oracle多行合并成一行自带函数
- off by one
- Spring基本用法<一>:从Spring起源,bean的创建到IoC/依赖注入
- java之简单的Single Number算法
- 下载Spring framework的简单方法
- 关于HTML5那些事儿2
- 动态规划题目分类总结
- X天特惠818活动项目压力测试
- IntelliJ IDEA设置JVM运行参数
- BluetoothKit蓝牙通信框架
- IP地址问题