Spring - 对IoC及DI的深入理解

IoC

一、IoC核心:

BeanFactory IoC容器:Spring最底层的接口,只提供了IoC功能,负责创建、组装、管理bean,在应用中,一般不使用BeanFactory,而推荐使用ApplicationContext(应用上下文)。

ApplicationContext:此接口继承了BeanFactory,除此之外还提供AOP集尘、国际化处理、事件传播、统一资源价值等功能。

bean创建时机

1、BeanFactory需要等到获取某一个bean的时候才会创建该bean -- 延迟初始化

2、ApplicationContext在启动Spring容器的时候就会创建所有的bean(web应用建议)

二、Bean实例化方式:

1、构造器实例化(无参数构造器):最标准,使用最多

2、静态工厂方法实例化:解决系统遗留问题

3、实例工厂方法实例化:解决系统遗留问题

4、实现FactoryBean接口实例化:实例工厂变种。如集尘MyBatis框架使用

三、Bean作用域

在Spring容器中是指其创建的Bean对象相对于其他Bean对象的请求可见范围,定义语法格式:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
	
    <bean id="" class="" scope="作用域" />
</beans>

作用域参数:

1.singleton:单例,在Spring IoC容器中仅存在一个Bean实例(默认的scope)

2.prototype:多例,在每次从容器调用bean时,都会返回一个新的实例,不会再容器启动时创建对象。

在开发中主要使用 singleton 、prototype 其余参数可上官网查看。

四、Bean初始化和销毁

在Spring IoC容器可以帮我们管理对象的创建,也可管理对象在创建之后的初始化和收回之前的扫尾操作,语法如下:

<bean id="" class="" init-method="该类中初始化方法名" destroy-method="该类中销毁方法名" />

init-method:bean生命周期初始化方法,对象创建后就进行调用

destroy-method:容器正常被销毁的时候,如果bean被容器管理,会调用该方法。

补充:Lombok.jar中可使用@Cleanup注解释放资源

五、bean实例化过程

自行研究,有高见解的朋友可否留言解说一番

 

DI

什么是注入操作?简单来说就是给bean对象设置值.

怎么注入?

1.setter方法注入

2.构造器注入

注入值类型:

1.常量值(简单类型) : value元素

2.对象 : ref元素

3.集合 : 对应集合类型元素

一、XML自动装备(不推荐)

设置<bean/>元素的autowire属性

<bean id="" class="" autowire="byType" />

autowire属性:让Spring按照一定的规则方式自己去找合适的对象,并完成DI操作

二、Setter方法注入

其实就是通过对象的Setter方法来完成对像的设置操作

1.使用bean元素的<property>子元素设置;

2.Spring通过属性的Setter方法入值

3.在配置文件中配置的值都是String,Spring可以自动完成类型的转换

4.属性的设置是在init方法执行之前完成的

注入常量:
 

<property name="对象属性名称">
        <value>需要注入的值</value>
</property>

简写:

<property name="对象属性名称" value="需要注入的值" />

例:

public class User{
    private String name;

    public void setName(String name){
        this.name = name;
    }
}

XML配置:

<bean id="user" class="cn.fg.user (全限定名称)" >
    <property name="name" value="副官" />
</bean>

注入对象:

<property name = "对象属性名称">
    <ref bean="被注入对象的bean的id" />
</property>

简写:

<property name="dao" ref=""/>

注入集合:

//注入set集合

<property name="set">
    <set>
        <value>set1</value>
    </set>
</property>

//注入map

<property name="map">
    <map>
        <entry key="key1" value="value1"/>
    </map>
</property>

三、构造器注入

其实就是通过构造器,在完成创建对象的时候,同时初始化对象设置数据的操作:

setter方式注入使用:<property />元素,构造器方式注入使用<constructor-age />元素,其余操作大致和setter方式注入差不多.(等本人心情好再详写)

四、Bean元素继承

多个bean元素共同配置的抽取,实则是bean配置的拷贝,和Java继承不同

原来的配置:

存在继承后:

五、XML配置连接池和关联db.properties文件

1.拷贝连接数据库需要的jar包

db.properties文件

在applicationContext.xml文件中增加context命名空间

<context:property-placeholder location="classpath:db.properties" system-properties-mode="NEVER"/>
<!-- 1.配置一个连接池 -->
<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
	init-method="init" destroy-method="close"
>
	<property name="driverClassName" value="${driverClassName}"></property>
	<property name="url" value="${url}"></property>
	<property name="username" value="${username}"></property>
	<property name="password" value="${password}"></property>
</bean>

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值