spring的了解以及简单框架的搭建
了解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的了解以及简单框架的搭建的更多相关文章
- Spring security oauth2最简单入门环境搭建
关于OAuth2的一些简介,见我的上篇blog:http://wwwcomy.iteye.com/blog/2229889 PS:貌似内容太水直接被鹳狸猿干沉.. 友情提示 学习曲线:spring+s ...
- SSM(Spring+SpringMVC+Mybatis)+Mysql 框架整合搭建流程以及其间注意事项
复习SSM框架,太久没用自己手动撘一个,发现自己还是有很多地方忘记了和没注意的事项... 首先,直接给出总流程: 零.引jar包 1.引包(或者写maven.pom) 一.数据库部分 设计数据库各表结 ...
- Spring+SpringMvc+Mybatis框架集成搭建教程
一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以在自己搭建SSM框架集成的时候,出现了这样或者那样的问题,很是苦恼 ...
- Spring+SpringMVC+Mybatis(SSM)框架集成搭建
Spring+SpringMVC+Mybatis框架集成搭建教程 一.背景 最近有很多同学由于没有过SSM(Spring+SpringMvc+Mybatis , 以下简称SSM)框架的搭建的经历,所以 ...
- 浅析MyBatis(二):手写一个自己的MyBatis简单框架
在上一篇文章中,我们由一个快速案例剖析了 MyBatis 的整体架构与整体运行流程,在本篇文章中笔者会根据 MyBatis 的运行流程手写一个自定义 MyBatis 简单框架,在实践中加深对 MyBa ...
- asp.net mvc 简单项目框架的搭建(二)—— Spring.Net在Mvc中的简单应用
摘要:上篇写了如何搭建一个简单项目框架的上部分,讲了关于Dal和Bll之间解耦的相关知识,这篇来把后i面的部分说一说. 上篇讲到DbSession,现在接着往下讲. 首先,还是把一些类似的操作完善一下 ...
- asp.net mvc 简单项目框架的搭建过程(一)对Bll层和Dal层进行充分解耦
学习asp.net 已经有近三个月的时间了,在asp.net mvc上花的时间最多,但个人真是有些菜,不得不说,asp.net mvc的水真的还是蛮深的.目前在公司实习,也见过公司几个项目的代码了.对 ...
- 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建三:配置spring并测试
这一部分的主要目的是 配置spring-service.xml 也就是配置spring 并测试service层 是否配置成功 用IntelliJ IDEA 开发Spring+SpringMVC+M ...
- Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建
目录 Spring MVC+Spring+Mybatis+MySQL(IDEA)入门框架搭建 0.项目准备 1.数据持久层Mybatis+MySQL 1.1 MySQL数据准备 1.2 Mybatis ...
随机推荐
- Swift初窥----语法进阶
缺省绑定(Optional Binding 自己主动置空) 通过在类型变量后,加上?,能够实现缺省绑定为nil var window: UIWindow? 就是说,假设不正确window赋值,则win ...
- JS图片预加载插件
在开发H5项目中有时候会遇到要加载大量图片的情况,利用预加载技术可以提高用户浏览时的体验. 1)概念:懒加载也叫延迟加载:JS图片延迟加载,延迟加载图片或符合某些条件时才加载某些图片.预加载:提前加载 ...
- asp.net母版-页脚制作
1.母版创建流程略过 2.创建母版页css:Site.css body{ } .linkButton{ text-decoration:none; color:whitesmoke; } 3.母版页添 ...
- 摄像机Rtsp地址格式大全
各厂家rtsp地址格式如下: 一. 海康.中威摄像机 格式1 主码流:rtsp://admin:12345@192.168.1.64:554/Streaming/Channels/1 子码流:rts ...
- deeplearning.net 0.1 document - Multilayer Perceptron
Multilayer Perceptron 以下我们使用Theano来介绍一下单隐藏层的多层感知机(MLP).MLP能够看成一个logistic回归分类器,它使用一个已经学习的非线性转换器处理输入.这 ...
- 使用构建工具gradle打包时,遇到的中文问题和解决方式
1.使用gradle clean war 命令将项目打成war包.这一过程gradle没有提示报错. 2.将得到的myapp.war复制到tomcat下webapps(部署war包) 3.启动to ...
- AndroidX86模拟器Genymotion的一些使用和另一款Andy模拟器
命令行启动虚拟机 当我们下载安装好,可以通过命令行运行指定名字模拟器 D:\ProgramFiles\Genymobile\Genymotion\player --vm-name "Sam ...
- hdu1081 最大子矩阵
最大子矩阵自然直在最大连续子序列的升级版 只是其原理都是用到了动态规划思想 仅仅是矩阵用到了枚举 +合并 把非常多列看成是一列的和 #include<stdio.h> ...
- 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 ...
- ui-router $transitions 用法
1. //route redirection $transitions.onStart({to: 'manage'}, function (trans) { var params = trans.pa ...