spring入门

HelloWord.java

package cn.itcast.spring;
public class HelloWord {
public HelloWord(){
    System.out.println("helloword空参构造函数");
}
public HelloWord(String msg){
    System.out.println(msg);
    }
public void sayHello(){
    System.out.println("sayHello");
    }
public void init(){
    System.out.println("init");
    }
public void destroy(){
    System.out.println("destroy");
    }
}

HelloWordFactory.java

package cn.itcast.spring;
public class HelloWordFactory {
public HelloWordFactory(){
    System.out.println("hellowrldfactory");
}
public static HelloWord getInstance(){
    return new HelloWord("static-factory-hellword-newInstance");
}
public HelloWord getIns(){
    return new HelloWord("factory-helloword-instance");
    }
}

在src目录下建spring配置文件 applicationContext.xml

<?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-2.5.xsd">

<import resource="/cn/itcast/spring/aplicationContext-hello.xml"/>

</beans>

根据模块的spring文件 applicationContext-helloword.xml

<?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-2.5.xsd">

<bean id="hello_1" class="cn.itcast.spring.HelloWord" init-method="init" destroy-method="destroy" scope="prototype"></bean>

<alias name="hello_1" alias="你好"/>

<bean id="hello_staic_factory" class="cn.itcast.spring.HelloWordFactory" factory-method="getInstance" ></bean>

<bean id="hello_factory" class="cn.itcast.spring.HelloWordFactory" ></bean>

<bean id="aa" factory-bean="hello_factory" factory-method="getIns" ></bean>

</beans>

控制反转:把对象的创建交给spring容器来做

 

一、spring容器创建对象的方式

1、默认是调用默认的构造函数

<bean id="hello_1" class="cn.itcast.spring.HelloWord"></bean>

2、利用静态工厂方法创建

spring调用工厂方法产生对象,但是真正创建对象还是由程序员来完成的

<bean id="hello_static_factory" class="cn.itcast.spring.HelloWordFactory" factory-method="getInstance"></bean>

3、实例工厂方法

<bean id="hello_factory" class="cn.itcast.spring.HelloWordFactory" ></bean>

<bean id="aa" factory-bean="hello_factory" factory-method="getIns"></bean>

  说明:spring配置文件中,只要是一个bean就会为该bean创建对象

ApplicationContext context = new

ClassPathXmlApplicationContext("applicationContext.xml");

HelloWord helloWord1 = (HelloWord) context.getBean("hello_1");//默认构造方法

HelloWord helloWord2 = (HelloWord) context.getBean("hello_staic_factory");//静态工厂方法

HelloWord helloWord3 = (HelloWord) context.getBean("aa");//实例工厂方法

 

二、spring容器创建对象的时机

  在单例的情况下

1、在默认的情况下,启动spring容器创建对象

2、在spring的配置文件bean中有一个属性lazy-init="default/true/false"

1、如果lazy-init为"default/false"在启动spring容器时创建对象

2、如果lazy-init为"true",在context.getBean时才要创建对象

意义:

(1)在第一种情况下可以在启动spring容器的时候,检查spring容器配置文件的正确性,如果再结合tomcat,如果spring容器不能正常启动,整个tomcat就不能正常启动。但是这样的缺点是把一些bean过早的放在了内存中,如果有数据,则对内存来是一个消耗

(2)在第二种情况下,可以减少内存的消耗,但是不容易发现错误

在多例的情况下 scope=prototype

就是一种情况:在context.getBean时才创建对象

疑问:1.实例工厂为原型,对象类不为原型,则在启动spring容器创建对象

2.实例工厂不为原型,对象类为原型,启动时spring创建工厂实例,在getBean创建对象实例

3.实例工厂,对象类都以为原型,在getBean时创建工厂和对象类实例

<bean id="hello_factory" class="cn.itcast.spring.HelloWordFactory"

scope="prototype"></bean>

<bean id="aa" factory-bean="hello_factory" factory-method="getIns" ></bean>

三、spring的bean中的scope

1、由spring产生的bean默认是单例的

2、可以在spring的配置文件中,scope的值进行修改="singleton/prototype/request

/session/global session"

3、如果spring的配置文件的scope为"prototype",则在得到该bean时才创建对象

四、spring容器对象的生命周期:

<bean id="hello_1" class="cn.itcast.spring.HelloWord"

init-method="init" destroy-method="destroy"></bean>

1、spring容器创建对象

2、执行init方法

3、调用自己的方法

4、当spring容器关闭的时候执行destroy方法

当scope为"prototype"时,spring容器是否调用destroy方法?不会。

时间: 2024-09-30 23:35:19

spring入门的相关文章

Spring入门导读——IoC和AOP

和MyBatis系列不同的是,在正式开始Spring入门时,我们先来了解两个关于Spring核心的概念,IoC(Inverse of Control)控制反转和AOP()面向切面编程. 1.IoC(Inversion of Control)控制反转 什么是控制反转呢?可以这么通俗的来解释,我们通常写代码当一个类会关联另一个类是会直接在这个类里new,例如: 1 package day_30_spring; 2 3 /** 4 * @author 余林丰 5 * 6 * 2016年10月30日 7

【书籍推荐】Spring实战-----Spring入门经典

如果看完了Servlet学习指南后,可以开始考虑使用框架了,这时候是完全没有什么问题的,因为有太多的开发者在帮我们解决问题了,作为一个新手,我们可以先使用别人的轮子,等到使用得很熟练,技术提高了,我们才考虑制造一些小轮子,当然这个过程需要很长的时间,但我相信只要不断的学习,就一定能成功. 当然,个人认为这本书只是入门级,因为文档是更好的资料,但是每个人迈出的第一步都倾向于轻松有趣,另外看英文版当然是更好有更好的提升,但是个人认为既然入门就可以选择看中文版的快速入门,然后再看英文版的文档,或者在下

spring入门篇-学习笔记

1.spring IOC的作用就是用加载配置文件的方式代替在代码中new 对象的方式来实例化对象. 2.IOC 全称:Inversion  of Control,中文意思:控制反转 3.依赖注入有两种方式: 设值注入-> 通过添加set方法,并在配置文件的bean中添加property标签(property引用另一个bean)的方式注入 构造注入->通过构造方法,并在配置文件的bean中添加constructor-arg标签的方式注入 例子项目结构: 以下是各文件代码: InjectDao.j

我的Spring入门Demo

第一步:导入Spring jar 包 Spring核心包(4个) 日志包(2个) jdbc模板支持(1个) spring-jdbc-3.2.0.RELEASE.jar 模板相关事务处理包(1个) spring-tx-3.2.0.RELEASE.jar ORM框架模板支持(1个) spring-orm-3.2.0.RELEASE.jar 第二步:增加一个Spring 配置文件    beans.xml <?xml version="1.0" encoding="UTF-8

flex eclipse整合spring入门

最先下载FlashBuilder_4_7_LS10_win64.exe试了几个eclipse安装插件都没成功,包括myeclipse8.5.spring sts2.9.2.eclipse3.5.j2eeeclipse版本4.2.0,后来搞了一个FlashBuilder_4_LS10.exe安装完找不到插件安装文件原来这个是单独版,必须插件版才行,最后下载FlashBuilder_4_Plugin_LS10.exe终于配置成功了,myeclipse8.5不行,spring sts可以了. spri

spring 入门笔记(一)

最近学习spring 通过笔记形式加深自己对spring的理解,也希望能跟各位入门者分享和讨论. 一.下载spring 下载spring也费了不少功夫,目前还没从spring官网找到下载入口,我从下面的网站下载spring-framework-4.0.5.RELEASE. http://maven.springframework.org/release/org/springframework/spring/ 直接解压,如下: 二.导入额外的包 因为springframework里边包含的包还不全

spring 入门篇

spring 入门篇 相对于Hibernate(冬眠),Spring(春天),具有更多的诗意与希望的感觉,是为了解决传统J2EE开发效率过低.开发商之间不统一.没有真正实现“写一次到处使用”,它的优点有如下: 低侵入式设计,代码污染极低. 独立于各种应用服务,真正实现写一次到处都可以使用. 用户可选择的自由度高,用户可以选择部分或者是全部SPRING的功能,它并不是设计来取代其它框架,可以和其它的框架(如STRUTS.HIBERNATE)等结合极好. 面向接口的编程方式,使得代码的偶合度降到最低

Spring入门(一)— IOC、DI

一.Spring介绍 Spring 是一个开源框架,是为了解决企业应用程序开发复杂性而创建的.框架的主要优势之一就是其分层架构,分层架构允许您选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架.简单来说,Spring是一个分层的JavaSE/EE full-stack(一站式) 轻量级开源框架. Spring是2003年兴起的一个轻量级的java框架, 由 Rod Johnson 在其编著的<Expert one on one J2EE design and development

Spring入门注解版

参照博文Spring入门一,以理解注解的含义. 项目结构: 实现类:SpringHelloWorld package com.yibai.spring.helloworld.impl; import org.springframework.stereotype.Component; import com.yibai.spring.helloworld.HelloWorld; @Component public class SpringHelloWorld implements HelloWorl

SSM应用(一)--Spring入门

Spring是什么 Spring是一个框架: Spring是一个容器框架: Spring用于管理bean(Java类),并维护bean(Java类)之间的关系: 容器框架:整个web都属于Spring来管理,Spring可以管理web层.业务层.dao持久层,每一层都是由Java类(bean)组成的,Spring能够管理所有的bean,并且维护bean之间的关系: Spring的核心机制 Bean: 可以是Java中的任何对象,可以是JavaBean/service/servlet/dao,Sp