了解spring:

Spring是一个开源的控制反转(Inversion of Controller)和面向切面(AOP)的框架,目的是为了简化开发。

IOC(控制反转):

public class PersonServiceBean{
private PersonDao personDao=new PersonDaoBean(); public void save(Person person){
petsonDao.save(person);
}
}

PersonDaoBean是在应用内部创建及维护的。所谓的控制反转就是本身不依赖对象的创建以及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用中转移到了外部容器。

依赖注入(Dependency Injection)

依赖注入,就是我们前面说的控制反转,将bean的创建交给了spring容器,那么在该bean中的一些依赖属性的值的赋值操作,就叫依赖注入。

一些使用spring的优势:

降低组件之间的耦合度,实现软件各层之间的解耦。
使用容器提供的服务,例如:事务传播行为
单例模式支持
AOP技术

spring简单框架的搭建

首先我们需要官网下载spring,至于这个,我也没找到。我的spring是spring2.5.6版本。链接:http://pan.baidu.com/s/1qYgtQtm

使用spring的简单需要jar包:

dist/spring.jar
lib/jakarta-commons/commons-logging.jar
如果需要使用面向切面(AOP)
lib/aspectj/aspectjweaver4.jar和aspectjrt.jar
lib/cglib/cglib-nodep-2.1_3.jar
如果希望使用注解,还需要加入:
lib/j2ee/common-annotations.jar

配置文件模板beans.xml(文件名可随意):

配置文件beans.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">
</beans>

实例化spring容器

方法一:
在类路径下寻找配置文件来实例化容器

ApplicationContext ctx=new ClassPathXmlApplicationContext(new String[]{"beans.xml"});

方法二:
在文件系统路径下寻找配置文件来实例化容器

ApplicationContext ctx=new FileSystemXmlApplicationContext(new String[]{"d:\\beans.xml"});

配置文件可以指定多个,字符串数组表示。

使用spring容器装载bean

 <bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"></bean>

id:bean的唯一标识

name:bean的唯一标识

class:bean的源路径

为什么有了id还有name属性?

  因为id是xml已有属性,会检查,是不能包含特殊字符

spring的三种实例化bean的方式:

1、构造方法实例化:

<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"/>

2、静态工厂实例化:
工厂中的生产bean方法为静态的

package cn.itcast.service.impl;

public class PersonServiceBeanFactory {

    public static PersonServiceBean createPersonServiceBean(){
return new PersonServiceBean();
} } <bean id="personService2" class="cn.itcast.service.impl.PersonServiceBeanFactory"
factory-method="createPersonServiceBean"/>

3、实例化工厂实例化:

package cn.itcast.service.impl;

public class PersonServiceBeanFactory {

    public static PersonServiceBean createPersonServiceBean(){
return new PersonServiceBean();
} public PersonServiceBean createPersonServiceBean2(){
return new PersonServiceBean();
} } <bean id="personServiceFactory" class="cn.itcast.service.impl.PersonServiceBeanFactory"/>
<bean id="personService3" factory-bean="personServiceFactory"
factory-method="createPersonServiceBean2"/>

bean的作用域

  通过bean中的scope标签可以设置bean的作用域。

<bean id=".." class=".." scope=".." />

  singleton:单例模式,每一次getBean得到的是同一个。  

  prototype:每一次创建一个新实例
  request
  session

bean的生命周期:

1、bean的实例化:

默认情况下的bean作用范围是单实例的,是在容器实例化的时候就会对bean进行实例化的

bean的作用域范围是prototype的时候,是在调用getBean方法的时候进行实例化的
request,session也是这样。

如果希望在singleton中改变bean的实例化时机,可以使用lazy-init属性。
一般不建议在开发阶段使用,因为这样错误不方便查找。

singleton:单例模式,每一次getBean得到的是同一个。
可以设置延迟加载,使用lazy-init=true
<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean" scope="singleton" lazy-init="true"/>
如果设置所有的bean延迟加载:
<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"
default-lazy-init="true">

bean的初始化方法和销毁方法:

bean的初始化方法:

public void init(){
System.out.println("初始化");
}

init-method属性

<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"
init-method="init""/>

bean的销毁前方法:

public void destory(){
System.out.println("我要挂了");
}

destory-method属性:

<bean id="personService" class="cn.itcast.service.impl.PersonServiceBean"
init-method="init" destroy-method="destory"/>

测试代码:

    @Test
public void instanceSpring(){
AbstractApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
PersonService personService=(PersonService) ctx.getBean("personService");
ctx.close();//正常关闭spring容器
}

注意:要使用AbstractApplicationContext对象才能正常关闭spring容器。

spring的了解以及简单框架的搭建的更多相关文章

  1. Spring security oauth2最简单入门环境搭建

    关于OAuth2的一些简介,见我的上篇blog:http://wwwcomy.iteye.com/blog/2229889 PS:貌似内容太水直接被鹳狸猿干沉.. 友情提示 学习曲线:spring+s ...

  2. SSM(Spring+SpringMVC+Mybatis)+Mysql 框架整合搭建流程以及其间注意事项

    复习SSM框架,太久没用自己手动撘一个,发现自己还是有很多地方忘记了和没注意的事项... 首先,直接给出总流程: 零.引jar包 1.引包(或者写maven.pom) 一.数据库部分 设计数据库各表结 ...

  3. Spring+SpringMvc+Mybatis框架集成搭建教程

    一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...

  4. Spring+SpringMVC+Mybatis(SSM)框架集成搭建

    Spring+SpringMVC+Mybatis框架集成搭建教程 一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以 ...

  5. 浅析MyBatis(二):手写一个自己的MyBatis简单框架

    在上一篇文章中,我们由一个快速案例剖析了 MyBatis 的整体架构与整体运行流程,在本篇文章中笔者会根据 MyBatis 的运行流程手写一个自定义 MyBatis 简单框架,在实践中加深对 MyBa ...

  6. asp.net mvc 简单项目框架的搭建(二)—— Spring.Net在Mvc中的简单应用

    摘要:上篇写了如何搭建一个简单项目框架的上部分,讲了关于Dal和Bll之间解耦的相关知识,这篇来把后i面的部分说一说. 上篇讲到DbSession,现在接着往下讲. 首先,还是把一些类似的操作完善一下 ...

  7. asp.net mvc 简单项目框架的搭建过程(一)对Bll层和Dal层进行充分解耦

    学习asp.net 已经有近三个月的时间了,在asp.net mvc上花的时间最多,但个人真是有些菜,不得不说,asp.net mvc的水真的还是蛮深的.目前在公司实习,也见过公司几个项目的代码了.对 ...

  8. 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建三:配置spring并测试

    这一部分的主要目的是 配置spring-service.xml  也就是配置spring  并测试service层 是否配置成功 用IntelliJ IDEA 开发Spring+SpringMVC+M ...

  9. Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建

    目录 Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建 0.项目准备 1.数据持久层Mybatis+MySQL 1.1 MySQL数据准备 1.2 Mybatis ...

随机推荐

  1. Swift初窥----语法进阶

    缺省绑定(Optional Binding 自己主动置空) 通过在类型变量后,加上?,能够实现缺省绑定为nil var window: UIWindow? 就是说,假设不正确window赋值,则win ...

  2. JS图片预加载插件

    在开发H5项目中有时候会遇到要加载大量图片的情况,利用预加载技术可以提高用户浏览时的体验. 1)概念:懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片.预加载:提前加载 ...

  3. asp.net母版-页脚制作

    1.母版创建流程略过 2.创建母版页css:Site.css body{ } .linkButton{ text-decoration:none; color:whitesmoke; } 3.母版页添 ...

  4. 摄像机Rtsp地址格式大全

    各厂家rtsp地址格式如下:  一. 海康.中威摄像机 格式1 主码流:rtsp://admin:12345@192.168.1.64:554/Streaming/Channels/1 子码流:rts ...

  5. deeplearning.net 0.1 document - Multilayer Perceptron

    Multilayer Perceptron 以下我们使用Theano来介绍一下单隐藏层的多层感知机(MLP).MLP能够看成一个logistic回归分类器,它使用一个已经学习的非线性转换器处理输入.这 ...

  6. 使用构建工具gradle打包时,遇到的中文问题和解决方式

    1.使用gradle  clean  war 命令将项目打成war包.这一过程gradle没有提示报错. 2.将得到的myapp.war复制到tomcat下webapps(部署war包) 3.启动to ...

  7. AndroidX86模拟器Genymotion的一些使用和另一款Andy模拟器

    命令行启动虚拟机 当我们下载安装好,可以通过命令行运行指定名字模拟器 D:\ProgramFiles\Genymobile\Genymotion\player  --vm-name "Sam ...

  8. hdu1081 最大子矩阵

    最大子矩阵自然直在最大连续子序列的升级版  只是其原理都是用到了动态规划思想     仅仅是矩阵用到了枚举 +合并       把非常多列看成是一列的和 #include<stdio.h> ...

  9. opencv3.3.1 opencv_contribut 3.3.1 git 20180117最新版的在ubuntu1604上的编译

    过程: 1.  git  clone  ...   contribut 2. git  clone  ...  opencv 3.  git  checkout  -b     v3.3.1 4 gi ...

  10. ui-router $transitions 用法

    1. //route redirection $transitions.onStart({to: 'manage'}, function (trans) { var params = trans.pa ...