Spring 核心知识点 IOC容器入门与了解

知识体系:

一: Spring框架的简介  

1.什么是Spring?

2.Spring 的主要功能有哪些?

二:  容器和Bean管理   

1.Spring容器的简介

2.Spring 容器的实例化  

3.Spring容器的使用

4.Bean的实例化

5.Bean的命名

6.Bean的作用域

7.Bean的生命周期

8.Bean延迟实例化

9.制定Bean依赖关

 三:容器的IOC应用       

1.ICO概念

2.Setter注入

3.构造器装配

4.自动装配


一:Spring框架的简介

1.什么是Spring?

  1. Spring的核心是一个轻量级(Lightweight)的容器(Container)。
  2. Spring是实现IoC(Inversion of Control)容器和非入侵性(No intrusive)的框架。
  3. Spring提供AOP(Aspect-oriented programming)概念的实现方式。
  4. Spring提供对持久层(Persistence)、事物(Transcation)的支持。
  5. Spring供MVC Web框架的实现,并对一些常用的企业服务API(Application Interface)提供一致的模型封装。
  6. Spring提供了对现存的各种框架(Structs、JSF、Hibernate、Ibatis、Webwork等)相整合的方案。

2.Spring 的主要功能有哪些?







  二:  容器和Bean管理 

1.Spring容器的简介

  1. 在Spring中,任何的Java类和JavaBean都被当作Bean处理,这些Bean通过容器管理和应用
  2. Spring容器实现了IOC和AOP机制,这些机制可以简化Bean对象创建和Bean对象之间的解耦
  3. Spring容器有BeanFactory和ApplicationContext两种类型
小知识点(JavaBean是一种简单规范的Java对象)
温馨提示:何时使用Spring? 当需要管理JavaBean对象的时候就可以使用Spring,Spring是最简洁的对象管理方案之一

2.Spring 容器的实例化

ApplicationContext继承自BeanFactory接口,拥有更多的企业级的方法,推荐使用它来实例化,方法如下:

//加载文件系统的配置文件实例化
String config="applicationContext.xml所在的路径";
ApplicationContext ac=newFileSystemXmlApplicationContext(config);

//加载工程classpath下的配置文件实例化
String config="applicationContext.xml";
ApplicationContext ctx =
new ClassPathXmlApplicationContext(config);

温馨提示:如何使用Spring? 遵守Spring定义的规则,基于配置和默认规则,减少代码的书写。

3.Spring 容器的使用

从本质上讲,BeanFactory和ApplicationContext仅仅只是一个维护Bean定义以及相互依赖关系的高级工厂接口而已,通过BeanFactory和
ApplicationContext我们可以访问bean定义。
首先在容器配置文件applicationcontext.xml中添加Bean定义
<bean id="唯一的标识符" class="类所在路径"/>
然后在创建BeanFactory和ApplicationContext容器对象后,调用getBean()方法获取Bean的实例即可
方法使用示例:getBean("唯一的标识符")

4.Bean实例化

Spring容器创建Bean对象的方法有以下3种
-用构造器来实例化
-使用静态工厂方法实例化
-使用实例工厂方法实例化

温馨提示:将对象创建规则告诉Spring,Spring会帮你去创建对象:基于配置和默认规则,减少代码的书写!

下面将分别介绍三种Bean的实例化实例:

用构造器来实例化

<bean id="demo1" class="bean类型" />

<bean name="demo2" class="bean类型" />

id或者name属性指定Bean名称,用于从Spring中查找这个Bean对象,class用于指定Bean类型,会自动调用无参构造器创建对象。


使用静态工厂方法实例化

<bean id="demo3" class="bean类型" factoy-method="Static方法" />

id属性用于指定Bean名称

class属性用于指定工厂类型

factory-method属性用于指定工厂中创建Bean对象的方法,必须用Static修饰的方法


使用实例工厂方法实例化

<bean id="demo4" class="bean类型" />

<bean id="demo5" factory-bean="demo4" factory-method="getTime" />


下面的factory-method和上面的id对应


id用于指定Bean名称

factory-bean属性用于指定工厂Bean对象

factory-method属性用于指定工厂中创建Bean对象的方法

5.Bean的命名

1.Bean的名称
-在Spring容器中,每个Bean都需要有名字(即标识符),该名字可以用<bean>元素的id和name属性指定
-id属性比name严格,要求具有唯一性,不允许用"/"等特殊字符

2.Bean的别名

为已定义好的Bean,再增加另外一个名字引用,可以使用<alias>指定

<alias name="demo6" alias="demo7" />

这两个名字都可以用


6.Bean的生命周期

1.指定初始化回调方法
<bean id="demo8" class="bean类型" init-method="init">
</bean>

2.指定销毁回调方法,仅使用与singleton模式的bean

<bean id="demo9" class="bean类型" destroy-method="销毁方法名">

</bean>

提示:指定销毁回调方法,仅使用于singleton模式的Bean

并且Spring会管理对象的创建过程

3.在顶级的<beans/>元素中的default-init-method属性,可以为容器所有<bean>指定初始化回调方法

<beans default-init-method="init">

<bean id="demo" class="bean类型"/>

</beans>

4.在顶级的<beans/>元素中的default-destory-method属性,可以为容器所有的<bean>指定销毁回调方法

<beans default-destory-method="destory">

<bean id="demo" class="bean类型">

</beans>


7.Bean延迟实例化

1.在ApplicationContext实现的默认行为就是在启动时将所有singleton bean 提前实例化
2.如果不想让一个singleton bean在ApplicationContext 初始化时被提前实例化,可以使用<bean> 元素的
lazy-init="true"属性改变

3.一个延迟初始化bean将在第一次被用到时实例化

<bean id="demo10" lazy-init="true" class="bean类型"/>

4.在顶级的<beans/>元素中的default-lazy-init属性,可以为容器所有<bean>指定延迟实例化特性


8.指定bean依赖关系

1.当一个bean对另一个bean存在依赖关系时,可以利用<bean>元素的depends-on属性指定
<bean id="demo11" class="bean类型" depends-on="manager" />
<bean id="manager" class="ManagerBean">

2.当一个bean对多个bean存在依赖关系时,depends-on属性可以指定多个bean名,用逗号隔开

<bean id="demo12" class="bean类型" depends-on="manager1,manager2,manager3">


三:容器的IOC应用

1.IOC概念

1.IOC全称是Inversion of Control,被翻译为控制反转;
2.IOC是指程序中对象的获取方式发生反转,由最初的new方式创建,转变为由第三方框架创建和注入,
第三方框架一般是通过配置方式指定注入哪一个具体实现,从而降低了对象之间的耦合度

3.IOC按实现方法不同,可以分为依赖注入DI和依赖查找两种

4.Spring容器是采用DI方式实现了IOC控制,IOC是Spring框架的基础和核心。

5.DI全称是Dependency Injection,被翻译为依赖注入;

6.DI的基本原理就是将一起工作具有关系的对象,通过构造方法参数或方法参数传入建立关联,

因此容器的工作就是创建bean时注入那些依赖关系

7.IOC是一种思想,而DI是实现IOC的主要技术和途径

8.DI主要有两种注入方式,即 Setter注入和构造器注入

Setter注入

通过调用无参构造器或无参static工厂方法实例化bean之后,调用该bean的setter方法,

即可实现setter方式的注入

public class JDBCDataSource{

private String driver;

public void setDriver(String driver){

try{//注册数据库驱动

Class.forName(driver);

this.driver=driver;

}catch(Exception e){

throw new RuntimeException(e);

}

}

//其他代码。。。。。

}


在容器xml配置中,配置注入参数。

<bean id="dataSource" class="org.tarena.dao.JDBCDataSource">

<property name="driver" value="oracle.jdbc.OracleDriver" />

<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>

<property name="user" value="openlab" />

<property name="pwd" value="open123" />

</bean>



构造器注入


基于构造器的注入是通过调用带参数的构造器来实现的,容器在bean被实例化的时候,根据参数类型执行相应的构造器。

public class OracleUserDAO implements UserDAO{

private JDBCDataSource dataSource;

publicOracleUserDAO(JDBCDataSource dataSource){

this.dataSource=dataSource;

}

//其他代码。。。

}


按构造参数索引指定注入

<bean id="dataSource" class="org.tarena.dao.JDBCDataSource">

<property name="driver" value="oracle.jdbc.OracleDriver"/>

<property name="url" value="jdbc:oracle:thin:@localhost:1521:XE"/>

<property name="user" value="openlab"/>

<property name="pwd" value="open123"/>

</bean>

<bean id="userDAO" class="org.tarena.dao.OracleUserDAO">

<constructor-argindex="0" ref="dataSource" />

</bean>


2.自动装配

1.Spring IOC容器可以自动装配(autowire) 相互协作bean之间的关联关系,autowire可以针对单个bean进行设置,autowire的方便之处在于减少xml的注入配置
2.在xml配置文件中,可以在<bean/>元素中使用autowire属性指定自动装配规则,一共有五种类型值

1.       no这是Spring框架的默认设置,在该设置下自动装配是关闭的,开发者需要自行在bean定义中用标签明确的设置依赖关系。

2.       byName该选项可以根据bean名称设置依赖关系。当向一个bean中自动装配一个属性时,容器将根据bean的名称自动在在配置文件中查询一个匹配的bean。如果找到的话,就装配这个属性,如果没找到的话就报错。

3.       byType该选项可以根据bean类型设置依赖关系。当向一个bean中自动装配一个属性时,容器将根据bean的类型自动在在配置文件中查询一个匹配的bean。如果找到的话,就装配这个属性,如果没找到的话就报错。

4.       constructor造器的自动装配和byType模式类似,但是仅仅适用于与有构造器相同参数的bean,如果在容器中没有找到与构造器参数类型一致的bean,那么将会抛出异常。

5.       autodetect该模式自动探测使用构造器自动装配或者byType自动装配。首先,首先会尝试找合适的带参数的构造器,如果找到的话就是用构造器自动装配,如果在bean内部没有找到相应的构造器或者是无参构造器,容器就会自动选择byTpe的自动装配方式。


配置示例:
<bean id="userDAO" class="org.tarena.dao.OracleUserDAO">

<constructor-argindex="0" ref="dataSource" />

</bean>

<bean id="userService" class="org.tarena.service.UserService" autowire="byType" />


上述配置,在UserService中如果存在接收UserDao类型的方法Setter方法,Spring就可以自动将userDAO对象注入方法

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值