Spring核心一(基本概念)
来源:互联网 发布:南风知我意琰阙百度云 编辑:程序博客网 时间:2024/06/07 13:39
1.Spring提供IOC和AOP应用,将组件的耦合度降至最低,即解耦。
2.spring本质是管理软件中的对象,如何创建对象和维护对象之间的关系
3.任何的java类和javabean都被当成bean处理,这些bean通过容器管理和应用
4.Spring容器有BeanFactory和ApplicationContext两种类型
5.BeanFactory和ApplicationContext仅仅只是一个维护Bean定义以及相互依赖关系的高级工厂接口。通过BeanFactory和ApplicationContext可以访问Bean定义
6.容器使用
step1: 首先在容器配置文件applicationContext.xml中添加Bean定义
<beanid=”标识符” class=”bean类型” />
step2: 在创建BeanFactory和ApplicationContext容器对象后,调用getBean()方法获取Bean的实例即可
getBean(“标识符”)
7.Bean的实例化
step1: 用构造器来实例化
<beanid=”calendarObj1” class=”java.util.GregorianCalendar” />
<beanname=”calendarObj2” class=”java.util.GregorianCalendar” />
ps:
id/name属性用于指定Bean的名称,用于从spring中查找这个bean对象
class用于指定Bean类型,会自动调用无参数构造器创建对象 //使用无参构造方法创建对象
step2: 使用静态工厂实例化
<bean id=”calendarObj2”class=”java.util.Calendar” factory-method=”getInstance” />
ps:
id属性用于指定Bean的名称,//创建对象的变量名
class属性用于指定工厂类型,//用于创建对象的类名
factory-method属性用于指定工厂中创建Bean对象的方法,必须用static修饰 //调用类中的静态方法
step3: 使用实例工厂实例化
<beanid=”calendarObj3” class=”java.util.GregorianCalendar” />
<beanid=”dateObj” factory-bean=”calendarObj3” factory-method=”getTime” />
ps:
id用于指定Bean的名称
factory-bean属性用于指定工厂Bean对象
factory-method属性用于指定工厂中创建Bean对象的方法
8.为已定义好的Bean再增加另外一个名字引用,可以使用<alias>定义
<aliasname=”fromName” alias=”toNmae” />
9.Bean的作用域
step1: singleton 在每个Spring IoC容器中对应一个对象实例,默认项
step2: protoype 一个bean定义对应多个对象实例
step3: request 在一次http请求中,一个Bean定义对应一个实例,仅限于web环境中
step4: session 在一个httpsession中,一个bean定义对应一个实例,仅限于web环境
step5: global Session 在一个全局HTTP Session中,一个bean定义对应一个实例:仅在基于protlet的web应用中才有意义,Portlet规范定义了全局Session的概念
ps:
上面指定的作用域,可以通过<bean>定义的scope属性指定
10.Bean的生命周期回调
step1: 指定初始化回调方法
<beanid=”exampleBean” class=”com.foo.ExampleBean” init-method=”init” />
step2: 指定销毁回调方法,仅适用于sington模式的bean
<beanid=”exampleBean” class=”com.foo.ExampleBean” destory-method=”destroy” />
step3: 在顶级<beans/>元素中的default-init-method属性,可以为容器所有<bean>指定初始化回调方法
<beansdefault-init-method=”init”>
<beanid=”exampleBean” class=”com.foo.ExampleBean” />
</beans>
step4: 在顶级<beans/>元素中的default-destroy-method属性,可以为容器所有<bean>指定销毁回调方法
<beansdefault-destroy-method=”init”>
<beanid=”exampleBean” class=”com.foo.ExampleBean” />
</beans>
11.Bean延迟实例化
step1: 在ApplicationContext实现的默认行为就是在启动时将所有singleton bean提前进行实例化
step2: 如果不想让一个singleton bean在ApplicationContext初始化时被提前实例化,可以使用<bean>元素的lazy-init=“true”属性改变
<beanid=”exampleBean” lazy-init=”true” class=”com.foo.ExampleBean” />
step3: 在顶级<beans/>元素中的default-lazy-init属性,可以为容器所有的<bean>指定延迟实例化特性
12.指定bean依赖关系
step1: 当一个bean对另一个bean存在依赖关系时,可以利用<bean>元素的depends-on属性指定
<beanid=”beanOne” class=”ExampleBean” depends-on=”manager” />
<beanid=”manager” class=”ManagerBean” />
step2: 当一个bean对多个bean存在依赖关系时,depends-on属性可以指定多个bean名,用逗号隔开
<beanid=”beanOne” class=”ExampleBean” depends-on=”manager1, manager2” />
12.IoC概念
step1: DI全称是DependencyInjection,被译为依赖注入
step2: DI的基本原理就是将一起工作具有关系的对象,通过构造的方法参数或方法参数传入建立关联,因此容器的工作就是创建bean时注入那些依赖关系
step3: DI主要有两种注入方式,即Setter注入和构造器注入
13.通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,可实现setter方式注入
publicclass JDBCDataSource{
privateString driver;
public void setDriver(String driver){
try{
Class.forName(driver);
this.driver = driver;
}catch(Exception e){
throw newRuntimeException(e);
}
}
//其他代码…..
}
在容器xml配置中,配置注入参数
<beanid=”dataSource” class=”org.tarena.dao.JDBCDataSource”>
<propertyname=”driver” value=”oracle.jdbc.OracleDriver” />
<propertyname=”url” value=”jdbc:oracle:thin:@localhost:1521:XE” />
<propertyname=”user” value=”openlab” />
<propertyname=”pwd” value=”open123” />
bean/>
14.构造器注入:通过调用带参数的构造器来实现的,容器在bean被实例化的时候,根据参数类型执行相应的构造器
publicclass OracleUserDAO implements UserDAO{
privateJDBCDataSource dataSource;
publicOracleUserDAO(JDBCDataSource dataSource){
this.dataSource =dataSource;
}
}
按构造参数索引指定注入
<beanid=”dataSpurce” class=”org.tarena.dao.JDBCDataSource”>
<propertyname=”driver” value=”oracle.jdbc.OracleDriver” />
<propertyname=”url” value=”jdbc:oracle:thin:@localhost:1521:XE” />
<propertyname=”user” value=”openlab” />
<propertyname=”pwd” value=”open123” />
</bean>
<baeanid=”userDAO” class=”org.tarena.dao.OracleUserDAO”>
<constructor-argindex=”0” ref=”dataSource” />
</bean>
15.自动装配
step1:Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系,,autowire可以针对单个bean进行设置,autowire的方便之处在于减少xml的注入配置
step2: xml中有5种类性值
no禁用自动装配,默认值
byName根据属性名自动装配,此选项将检查容器并根据名字查找与属性完全一致的bean,并将其与属性自动装配
byType 如果容器中存在一个与指定属性类型相同的bean,那么将与该属性自动装配
constructor与byType的方式类似,不同之处在于它应用于构造器参数
autodetect通过bean类来决定是使用construtor还是byTpe方式进行自动装配。如果发现默认构造器,那么将使用byType方式
<beanid=”userDAO” class=”org.tar.dao.OracleUserDAO”>
<constructor-argindex=”0” ref=”dataSource” />
</bean>
<beanid=”userService” class=”org.tarena.service.UserService” autowire=”byType” />
ps:
上述配置,在UserService中如果存在接收UserDAO类型的方法Setter方法,Spring就可以自动将userDAO对象注入进去
- Spring核心一(基本概念)
- Spring核心(一)概述
- Spring核心(一)概述
- Spring入门教程(一)IOC 基本概念
- Spring中IoC的基本概念(一)
- spring学习(一)________核心概念
- Spring IOC核心源码学习(一)
- Spring IOC核心源码学习(一)
- Spring IOC核心源码学习(一)
- 一、Spring 核心原理
- Spring实战笔记(一):Spring的核心
- Spring AOP(一)(基本概念+基于配置的AOP)
- Spring入门(一)——基本概念学习
- spring核心之依赖注入(一)设置注入
- 啃啃老菜:Spring IOC核心源码学习(一)
- 啃啃老菜:Spring IOC核心源码学习(一)
- spring三大核心学习(一)---控制反转
- 【Spring 核心】装配Bean(一) 自动化装配
- android进阶之了解Android系统与开机过程
- 【Chrome插件】使用FE助手-百度WEB前端助手
- PayPlugin的Payso层架构思路
- JavaScript类型转换
- WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-
- Spring核心一(基本概念)
- React Native的征程
- linux 配置ssh无密码登录不起作用的解决方案
- 楼天城(百度百科)
- webstorm上使用GIt工具
- 29. My Calendar I
- 专访阿里云游戏首席架构师李刚:如何解决云服务技术两大痛点?
- 一步一步制作yaffs/yaffs2根文件系统(七)---纠正前边出现的错误
- Android初级,MediaPlayer播放音乐,进度条滑动及唱片转动功能实现