Spring框架学习之第3节
model层(业务层+dao层+持久层)
spring开发提倡接口编程,配合di技术可以更好的达到层与层之间的解耦
举例:
现在我们体验一下spring的di配合接口编程,完成一个字母大小写转换的案例
思路如下:
- 创建一个接口ChangeLetter
- 两个类实现接口
- 把对象配置到spring容器中
- 使用
通过上面的案例,我们可以初步体会到di配合接口编程,的确可以减少层(web层)和业务层的耦合度。
思考题:
接口
ValidateUser
有一个方法
check(??)
有两个类实现不同的验证方式
CheckUser1 implements ValidateUser
{
check//到xml验证
}
CheckUser2 implements ValidateUser
{
check();//到数据库验证
}
项目结构:

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"
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 id="changeLetter" class="com.litao.inter.UpperLetter">
<property name="str">
<value>abcdef</value>
</property>
</bean>
--> <bean id="changeLetter" class="com.litao.inter.LowwerLetter">
<property name="str" value="ABRTY" />
</bean> </beans>
UpperLetter.java
package com.litao.inter;
public class UpperLetter implements ChangeLetter {
private String str;
@Override
public String change() {
// TODO Auto-generated method stub
//把小写转大写
return str.toUpperCase();
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
LowwerLetter.java
package com.litao.inter; //把小写字母变成大写
public class LowwerLetter implements ChangeLetter { public String str; @Override
public String change() {
// TODO Auto-generated method stub
return str.toLowerCase();
} public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
} }
ChangeLetter.java
package com.litao.inter;
public interface ChangeLetter {
//声明一个方法
public String change();
}
App1.java
package com.litao.inter; import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class App1 { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
ApplicationContext ac = new ClassPathXmlApplicationContext("com/litao/inter/beans.xml");
//获取,不用接口
//UpperLetter changLetter = (UpperLetter)ac.getBean("changeLetter");
//System.out.println(changLetter.change());
//使用接口来访问bean
ChangeLetter changeLetter = (ChangeLetter)ac.getBean("changeLetter");
changeLetter.change();
System.out.println(changeLetter.change()); } }
Spring框架学习之第3节的更多相关文章
- Spring框架学习之第2节
传统的方法和使用spring的方法 使用spring,没有new对象,我们把创建对象的任务交给了spring的框架,通过配置用时get一下就行. 项目结构 applicationContext.xml ...
- 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框架学习之第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 ...
随机推荐
- 自定义debug信息
#ifdef DEBUG #define debug(fmt,args...) printk(fmt ,##args) #define debugX(level,fmt,args...) if ...
- iTween基础之功能简介
一.iTween 介绍 .二.iTween 原理.三.iTween 下载.四.iTween 类介绍.五.主要功能介绍 原文地址:http://blog.csdn.net/dingkun520wy/ar ...
- java卡与native卡的区别
JavaCard Native 功能特性 开发语言 l 纯面向对象的Java语言的子集. Java语言先进灵活,开发调试速度快,实现灵活. l Java没有指针,并且有内部安全机制可以有效的避 ...
- Travis-CI的进一步使用
今天主要对.travis.yml文件和makefile进行进一步的了解: 1.在.travis.yml文件中添加了给linux系统中安装了cppunit库的语句,使能够持续集成写过的单元测试的代码.主 ...
- 在安卓3.0以下版本使用Fragment的注意事项
1. 按照网上的Fragment官网资料翻译来做一直有错: 10-03 02:43:13.971: E/AndroidRuntime(1921): java.lang.RuntimeException ...
- 常见的百度蜘蛛IP
根据不同的IP我们可以分析网站是个怎样的状态, 以下常见的百度蜘蛛IP: 123.125.68.*这个蜘蛛经常来,别的来的少,表示网站可能要进入沙盒了,或被者降权. 220.181.68.*每天这个I ...
- volley框架 出现at com.android.volley.Request.<init>
请求json数据的时候出现这种情况: 原因: // 访问网络,初始化详情 JsonObjectRequest jr = new JsonObjectRequest(Request.Method.GET ...
- android下的数据存储
android下数据存储的几种方式:(简单讨论) 1.文件 举例:登陆时“记住密码” 因为是基于Linux系统,直接建文件,文件会出现在项目工程:而手机登陆时,应该把文件放在手机里,通常数据放在dat ...
- iOS网络传输Delegate不被触发的本质原因
NSURLSession一共有四种Delegate (文后附表有Session和SessionTask分类表格) NSURLSessionDelegate, NSURLSessionDownloadD ...
- python-面向对象(指数对象举例)
class Index(object): def __init__(self,index_name,index_code,closePrice_yesterday,closePrice_today): ...