Spring框架学习之第2节
传统的方法和使用spring的方法
使用spring,没有new对象,我们把创建对象的任务交给了spring的框架,通过配置用时get一下就行。
项目结构
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"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- 在容器文件中配置bean(service/dao/domain/action/数据源) -->
<!-- bean元素的作用是,当我们的spring框架加载的时候,spring就会去看这里面有没有bean,如果有这个bean spring就会自动创建这个bean对象,并且将其装在到内存里面去 -->
<!--
类似于:Userservice userService = new UserService();
id号是和对象的变量名对应的,如果id号为litao,则这句话的含义为
UserService litao = new UserService();
property为属性值,name为注入这个属性,等价于
userService.setName("小明");set方法必须写否则注入不进去 -->
<bean id="userService" class="com.service.UserService">
<!-- 这里体现了容器的特点,配置bean并注入属性,体现出注入的概念 -->
<property name="name">
<value>小明</value>
</property>
<!-- 依赖注入 -->
<!-- 在userService对象中引用 bybService这个bean,不是用value而是ref引用-->
<property name="byeService" ref="bybService"/>
</bean>
<!-- 两种设置value的方式都行 -->
<bean id="bybService" class="com.service.BybService">
<property name="name" value="小红" />
</bean> </beans>
UserService.java
package com.service; public class UserService { public String name; private BybService byeService; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public BybService getByeService() {
return byeService;
} public void setByeService(BybService byeService) {
this.byeService = byeService;
} public void sayHello(){
System.out.println("hello " + name);
byeService.sayBye();
} }
BybService.java
package com.service; public class BybService { private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public void sayBye(){ System.out.println("bye " + name);
} }
Test.java
package com.test; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.service.BybService;
import com.service.UserService; public class Test { public static void main(String[] args){
//我们先使用传统方法,来调用UserService的sayHello方法
// UserService userService = new UserService();
// userService.setName("小明");
// userService.sayHello(); //我现在来使用spring来完成上面的任务
//1.得到spring的applicationContext对象(容器对象)
//通过类路径加载文件,这个对象就对象applicationContext.xml文件
//这句话会导致spring文件被加载
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
UserService us = (UserService)ac.getBean("userService");
us.sayHello(); //从ac(代表applicationContext这个容器)中取出
//BybService bybService = (BybService) ac.getBean("bybService");
//bybService.sayBye(); }
}
spring的运行原理图
我们再看spring
对以前案例小结
spring实际上是一种容器框架,可以配置各种bean(action/service/domain/dao,spring各个层都可以接管),并且可以维护bean与bean之间的关系,当我们需要使用某个bean的时候,我们可以getBean(id),使用即可。
ioc是什么?
答:ioc(inverse of crontrol)控制反转:所谓控制反转就是把创建对象(bean),和维护对象(bean)的关系的权利转移到spring的容器文件(applicationContext.xml),通过配置文件就可以把创建对象和维护对象关系搞定,而程序的本身不再维护了,程序要什么就取什么。
学习框架,最重要的就是学习各个配置,配置搞清楚了,配置就明白了。
DI是什么?
答:(dependency injection)依赖注入:实际上DI和IOC是同一个概念,spring的设计者认为DI更准确地表示spring的核心技术。
大的项目(税务,证券,石油,财务,政务系统,oa,erp)有很多模块是通用的,
比方说:分页,数据源可以将其做成一个bean,再比如安全机制,写日志,都将其做成一个bean,用的
时候将这个bean注入进去就行了,这样开发就像搭积木了,用的时候引用一下就行了。
使用了spring变成的力度变大了,开发效率肯定会提高。
(汇编 指令编程,c 语句编程,Java对象编程,spring 组件编程)
把ApplicationContext做成一个单例的了
修改后的项目
项目结构
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"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> <!-- 在容器文件中配置bean(service/dao/domain/action/数据源) -->
<!-- bean元素的作用是,当我们的spring框架加载的时候,spring就会去看这里面有没有bean,如果有这个bean spring就会自动创建这个bean对象,并且将其装在到内存里面去 -->
<!--
类似于:Userservice userService = new UserService();
id号是和对象的变量名对应的,如果id号为litao,则这句话的含义为
UserService litao = new UserService();
property为属性值,name为注入这个属性,等价于
userService.setName("小明");set方法必须写否则注入不进去 -->
<bean id="userService" class="com.service.UserService">
<!-- 这里体现了容器的特点,配置bean并注入属性,体现出注入的概念 -->
<property name="name">
<value>小明</value>
</property>
<!-- 依赖注入 -->
<!-- 在userService对象中引用 bybService这个bean,不是用value而是ref引用-->
<property name="byeService" ref="bybService"/>
</bean>
<!-- 两种设置value的方式都行 -->
<bean id="bybService" class="com.service.BybService">
<property name="name" value="小红" />
</bean> </beans>
UserService.java
package com.service; public class UserService { public String name; private BybService byeService; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public BybService getByeService() {
return byeService;
} public void setByeService(BybService byeService) {
this.byeService = byeService;
} public void sayHello(){
System.out.println("hello " + name);
byeService.sayBye();
} }
BybService.java
package com.service; public class BybService { private String name; public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public void sayBye(){ System.out.println("bye " + name);
} }
Test.java
package com.test; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.service.BybService;
import com.service.UserService;
import com.util.ApplicationContextUtil; import org.springframework.context.ApplicationContext; public class Test { public static void main(String[] args){ ((UserService)ApplicationContextUtil.getApplicationContext().getBean("userService")).sayHello(); }
}
ApplicationContextUtil.java
package com.util; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; //工具类,保证applicationContext只能有一个
final public class ApplicationContextUtil { private static ApplicationContext ac = null; private ApplicationContextUtil(){ } static{
ac = new ClassPathXmlApplicationContext("applicationContext.xml"); } public static ApplicationContext getApplicationContext()
{
return ac;
} }
Spring框架学习之第2节的更多相关文章
- Spring框架学习之第1节
spring快速入门 ① spring是什么? Struts是web框架(jsp/action/actionform) hibernate是orm框架(对象和关系映射框架),处于持久层 sprin ...
- Spring框架学习之第9节
aop编程 aop(aspect oriented programming)面向切面(方面)编程,是所有对象或者是一类对象编程,核心是(在不增加代码的基础上,还增加新功能) 汇编(伪机器指令 mov ...
- Spring框架学习之第8节
<bean id=”foo” class=”…Foo”> <property name=”属性”> <!—第一方法引用--> <ref bean=”bean对 ...
- Spring框架学习之第3节
model层(业务层+dao层+持久层) spring开发提倡接口编程,配合di技术可以更好的达到层与层之间的解耦 举例: 现在我们体验一下spring的di配合接口编程,完成一个字母大小写转换的案例 ...
- Spring框架学习之第7节
配置Bean的细节 ☞尽量使用scope=”singleton”,不要使用prototype,因为这样对我们的性能影响较大 ②如何给集合类型注入值 Java中主要的map,set,list / 数组 ...
- Spring框架学习之第6节
bean的生命周期 为什么总是一个生命当做一个重点? Servlet –> servlet生命周期 Java对象生命周期 往往笔试,面试总喜欢问生命周期的问题? ① 实例化(当我们的程序加载 ...
- Spring框架学习之第5节
request session global-session 三个在web开发中才有意义 如果配置成prototype有点类似于request 如果配置成singleton有点类似于web开发中的gl ...
- Spring框架学习之第4节
从ApplicaionContext应用上下文容器中获取bean和从bean工厂容器中有什么区别: 具体案例如下 结论: 1.如果使用上下文ApplicationContext,则配置的bean如果是 ...
- Spring框架学习一
Spring框架学习,转自http://blog.csdn.net/lishuangzhe7047/article/details/20740209 Spring框架学习(一) 1.什么是Spring ...
随机推荐
- Java实现TCP之Echo客户端和服务端
Java实现TCP之Echo客户端和服务端 代码内容 采用TCP协议编写服务器端代码(端口任意) 编写客户机的代码访问该端口 客户机按行输入 服务器将收到的字符流和接收到的时间输出在服务器consol ...
- PB建数据窗口的时候会报内存错误
同事碰到了这个问题,百度了一下,按照下边的方法解决了 ------解决方案--------------------我遇到过,是powerbuilder的注册表出问题了,找到注册表中HKEY_USER ...
- CentOS安装Nexus(Maven私有库)详细配置及上传本地jar到私服
Nexus原理 Maven的原理就是将jar从远程中央仓库下载到PC磁盘的本地仓库,当本地仓库没有发现需要的jar就会去Maven默认的远程中央仓库Maven Central(由Apache维护)中寻 ...
- 四则运算(2)之软件单元测试:Right-BICEP
一.Right-BICEP主要测试以下几方面的问题: Right-结果是否正确? B-是否所有的边界条件都是正确的? I-能查一下反向关联吗? C-能用其他手段交叉检查一下结果吗? E-你是否可以强制 ...
- 每日会议<第二天>
昨天:看android编程教学视频 今天:看了老师给的学姐.学长软件的代码,找到他们的优缺点,取长补短 困难:创新意识少,提不出建设性意见,缺少自己的思想
- CSS中盒子模型和position(一)
今天遇到几个css中的重要的知识点,记得这些都是以前看过的:margin.padding.border和position.可是用起来还是有很多的问题,以前自己看过去总是懒得记录,等到用起来了都不知道自 ...
- 用R语言对NIPS会议文档进行聚类分析
一.用R语言建立文档矩阵 (这里我选用的是R x64 3.2.2) (这里我取的是04年NIPS共计207篇文档做分析,其中文档内容已将开头的作者名和最后的参考文献进行过滤处理) ##1.Data I ...
- Kibana4学习<三>
discover 功能 Discover 标签页用于交互式探索你的数据.你可以访问到匹配得上你选择的索引模式的每个索引的每条记录.你可以提交搜索请求,过滤搜索结果,然后查看文档数据.你还可以看到匹配搜 ...
- HSSF,XSSF和SXSSF的区别
HSSF是POI工程对Excel 97(-2007)文件操作的纯Java实现 XSSF是POI工程对Excel 2007 OOXML (.xlsx)文件操作的纯Java实现 从POI 3.8版本开始, ...
- Ubuntu 下编译安装linux
1. 准备工作切换为管理员权限,sudo –i 输入用户密码 进入root 权限apt-get install build-essential kernel-package libncurses5-d ...