一、SpringIOC

  Spring的控制反转:把对象的创建,初始化,销毁的过程交给SpringIOC容器来做,由Spring容器控制对象的生命周期。

  1.1 启动Spring容器的方式:

  (1)加载classpath下的spring配置文件。其中xml可以是全路径,也可以是classpath的书写方式,该方式下Spring的配置文件必须放置于classpath路径下。

ApplicationContext ac = new  ClassPathXmlApplicationContext("classpath:jyk.xml");

(2)加载文件系统下的配置文件。其中xml是存放于某个具体文件目录下的Spring配置文件。

ApplicationContext ac = new FileSystemXmlApplicationContext("d:\\jyk.xml");

  1.2 从Spring容器中提取对象的方式。

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
"> <bean id="person" class="com.jyk.spring.simpletest.Person">
</bean> </beans>
package com.jyk.spring.simpletest;

public class Person {

    public Person() {
System.out.println("fuck...............");
} public void printInfo(){
System.out.println("hello..............");
}
}
package com.jyk.spring.simpletest;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class Test { public static void main(String[] args) {
ApplicationContext ac = new
ClassPathXmlApplicationContext("classpath:jyk.xml");
//根据beanid获取相应的对象并强制转换
Person p = (Person)ac.getBean("person");
p.printInfo();
}
}

二、Spring对象的常用创建方式

  2.1 无参构造函数

<bean id="person" class="com.jyk.spring.simpletest.Person"></bean>

  2.2 有参构造函数

  <!-- 按照方法参数的顺序赋值 -->
<bean id="person" class="com.jyk.spring.simpletest.Person">
<constructor-arg index="0" value="tom"></constructor-arg>
<constructor-arg index="1" value="12"></constructor-arg>
</bean> <!-- 按照方法参数的类型赋值 -->
<bean id="person" class="com.jyk.spring.simpletest.Person">
<constructor-arg type="java.lang.String" value="tom"></constructor-arg>
<constructor-arg type="java.lang.Double" value="12"></constructor-arg>
</bean> <!-- 按照方法参数的名称赋值 -->
<bean id="person" class="com.jyk.spring.simpletest.Person">
<constructor-arg name="name" value="tom"></constructor-arg>
<constructor-arg name="age" value="12"></constructor-arg>
</bean>

  2.3 静态工厂

<bean id="personFactory" class="com.jyk.spring.simpletest.PersonFactory" factory-method="createPerson"> </bean>
package com.jyk.spring.simpletest;

public class PersonFactory {

    public static Person createPerson(){
return new Person();
}
}

三、Spring对象的scope 

3.1 singleton(默认值)

   在Spring容器中一个Bean定义只有一个共享的对象实例。在一个普通的只有beanid和class配置的bean定义中,默认情况下是Spring容器初始化时便初始化该bean。

   但我们可以在bean节点中添加lazy-init="true"来延迟加载bean。这样只有在第一次获取bean时才会有初始化该bean。

<bean id="person" class="com.jyk.spring.simpletest.Person" lazy-init="true"></bean>

  如果想对所有的bean设置延迟初始化,可以在beans节点设置该属性值,如下

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
" default-lazy-init="true">

3.2 prototype

  当一个bean的scope为prototype时,该bean允许被多次创建(每使用一次就实例化一次),Spring无法对prototype的bean的生命周期负责,因此以为着持有prototype的对象并释放的责任,都需由客户端负责。

<bean id="person" class="com.jyk.spring.simpletest.Person" scope="prototype"></bean>

3.3 request

  每次http请求都会有各自的bean实例创建,即一个bean实例对应一次http请求,该作用域仅在基于web的spring applicationcontext场景下有效。

3.4 session

  一个bean实例对应一个http session,该作用域仅在基于web的spring applicationcontext场景下有效。

3.5 global session

四、Spring对象的初始化与销毁

  Spring默认在启动时对所有singleton bean进行实例化,即ApplicationContext提前地创建并配置好所有singleton bean。提前实例化意味着对启动的性能有所影响,但长远来看是好事,因为一旦某个对象的创建出现了问题,在初始化时便能及时发现并修复,而不是等到调用该对象时才报错(lazy-init="false"的情况)。

  Spring初始化和销毁bean时,有时需要人工介入处理一些逻辑,Spring提供了初始化和销毁bean时的自定义方法配置,init-method和destory-method,当容器初始化该bean时调用init方法,当该bean对象中容器中删除时调用destroy方法。

<bean id="person" class="com.jyk.spring.simpletest.Person" init-method="init" destroy-method="destroy"></bean>

Spring基本功能-IOC的更多相关文章

  1. Spring框架的IOC核心功能快速入门

    2. 步骤一:下载Spring框架的开发包 * 官网:http://spring.io/ * 下载地址:http://repo.springsource.org/libs-release-local/ ...

  2. Spring框架及IOC容器

    Spring是一个非常活跃的开源框架, 它是一个基于IOC和AOP来构架多层JavaEE系统的框架,它的主要目地是简化企业开发.Spring以一种非侵入式的方式来管理你的代码, Spring提倡”最少 ...

  3. Spring学习笔记IOC与AOP实例

    Spring框架核心由两部分组成: 第一部分是反向控制(IOC),也叫依赖注入(DI); 控制反转(依赖注入)的主要内容是指:只描述程序中对象的被创建方式但不显示的创建对象.在以XML语言描述的配置文 ...

  4. Spring框架(3)---IOC装配Bean(注解方式)

    IOC装配Bean(注解方式) 上面一遍文章讲了通过xml来装配Bean,那么这篇来讲注解方式来讲装配Bean对象 注解方式需要在原先的基础上重新配置环境: (1)Component标签举例 1:导入 ...

  5. Spring框架之IOC(控制反转)

    [TOC] 第一章Spring框架简介 IOC(控制反转)和AOP(面向方面编程)作为Spring框架的两个核心,很好地实现了解耦合.所以,简单来说,Spring是一个轻量级的控制反转(IoC)和面向 ...

  6. 一) Spring 介绍、IOC控制反转思想与DI依赖注入

    一.spring介绍1.IOC反转控制思想(Inversion of Control)与DI依赖注入(Dependency Injection)2.AOP面向切面的编程思想与动态代理3.作用:项目的粘 ...

  7. Spring系列之IOC的原理及手动实现

    目录 Spring系列之IOC的原理及手动实现 Spring系列之DI的原理及手动实现 导语 Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架.也是几乎所有J ...

  8. Spring框架[一]——spring概念和ioc入门(ioc操作xml配置文件)

    Spring概念 spring是开源的轻量级框架(即不需要依赖其他东西,可用直接使用) spring核心主要两部分 aop:面向切面编程,扩展功能不是修改源代码来实现: ioc:控制反转,比如:有一个 ...

  9. [02] Spring主要功能模块概述

    1.Spring主要功能模块   1.1 Core Container Spring的核心容器模块,其中包括: Beans Core Context SpEL Beans和Core模块,是框架的基础部 ...

随机推荐

  1. GDI+学习笔记

    7.1.1 GDI+概述 GDI+是微软在Windows 2000以后操作系统中提供的新的图形设备接口,其通过一套部署为托管代码的类来展现, 这套类被称为GDI+的“托管类接口”,GDI+主要提供了以 ...

  2. hadoop杂记-为什么会有Map-reduce v2 (Yarn)

    转自:http://www.cnblogs.com/LeftNotEasy/archive/2012/02/18/why-yarn.html 前言: 有一段时间没有写博客了(发现这是我博客最常见的开头 ...

  3. 【Properties】Properties的load方法

    Properties的load方法其实就是传进去一个输入流,字节流或者字符流,字节流利用InputStreamReader转化为字符流, 然后字符流用BufferedReader包装,Buffered ...

  4. 深入理解Mybatis中sqlSessionFactory机制原理

    对于任何框架而言,在使用前都要进行一系列的初始化,MyBatis也不例外.本章将通过以下几点详细介绍MyBatis的初始化过程. 1.MyBatis的初始化做了什么 2. MyBatis基于XML配置 ...

  5. 【BZOJ】1637: [Usaco2007 Mar]Balanced Lineup(前缀和+差分+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1637 很神思想.. 前缀和应用到了极点... 我们可以发现当数量一定时,这个区间最前边的牛的前边一个 ...

  6. Python 资料性网站。

    伯乐在线:http://blog.jobbole.com/category/python/ http://blog.chinaunix.net/uid/22334392/cid-24327-list- ...

  7. openstacksdk resource2 打印__dict__

    在一个继承resource2的实体里,打印self.__dict__结果是: {'_body': <openstack.resource2._ComponentManager object at ...

  8. 配置sudo su

    买了UCloud的机器默认给的是root权限,从安全考虑,这个得改改,那就添加一个普通用户吧.. 可是那群民工又有话说了,得有root权限才能启动那些服务进程,每次都要输入root密码才能切换到roo ...

  9. when case group by 的用法集合

    1.用那个以前大家都熟悉的例子,要求是依旧下面的表格求每个大洲的人口总和 国家(countrcoungry) 人口(population) 中国 600 美国 100 加拿大 100 英国 200 法 ...

  10. C++ map修改指定key的value

    对于修改C++指定key的value,网上查了很多,都说直接insert就会覆盖原来的值,是否是这样的呢?  C++ Code  12345678910111213141516171819202122 ...