Spring入门学习(一)
Spring的主要功能是控制反转和面向切面编程,下面我们就来编写第一个spring的程序来体验一下控制反转
首先是加载配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!--
- Middle tier application context definition for the image database.
-->
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
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/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"> </beans>
下面我们在程序中加载配置文件
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
然后新建类
package com.service.impl;
import com.service.Service;
public class ServiceBean implements Service {
@Override
public void save(){
System.out.println("save()");
}
}
抽取出类的接口 refactor----->extract interface
然后在测试方法中控制反转
package junit.test; import static org.junit.Assert.*; import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; import com.service.Service; public class SpringTest { @Test
public void test() {
ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
Service service = (Service)ac.getBean("service");
service.save();
} }
下面我们来看看是怎么控制反转的吧
首先新建类来解析配置文件,然后把配置文件中的bean中的属性提取出来创建对象,通过相应的方法刚返回给页面
package com.dom4j.test; import java.io.File;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set; import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.SAXReader; import com.service.Service;
import com.sun.beans.decoder.DocumentHandler; public class DomeStuTest { private Map<String,String> map = new HashMap<String,String>();
private Map<String,Object> objMap = new HashMap<String,Object>(); public DomeStuTest(String xml){
String xmlPath = getClass().getClassLoader().getResource(xml).getPath();
Document document = null;
SAXReader reader = new SAXReader(); try {
document = reader.read(new File(xmlPath));
} catch (DocumentException e) {
e.printStackTrace();
} //获取根节点
Element root = document.getRootElement(); //获取根节点下的子节点
Iterator it = root.elementIterator("bean");
while(it.hasNext()){
Element ele = (Element)it.next();
Attribute attr_name = ele.attribute("name");
Attribute attr_class = ele.attribute("class"); map.put(attr_name.getValue(), attr_class.getValue());
} //实例化容器内的对象并存储
Set<String> set = map.keySet();
Iterator its = set.iterator();
while(its.hasNext()){
String key = (String)its.next();
String value = map.get(key);
try {
Class clazz = Class.forName(value);
Object obj = clazz.newInstance();
objMap.put(key, obj);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} } } //取得对象
public Object get(String name){
Object obj = null;
Set<String> set = objMap.keySet();
Iterator it = set.iterator();
while(it.hasNext()){
String key = (String)it.next();
if(key.equals(name)){
obj = objMap.get(key);
}
}
return obj;
} }
然后在页面这样就可以获得对象
package junit.test; import org.junit.Test; import com.dom4j.test.DomeStuTest;
import com.service.Person;
import com.service.Service; public class SpringTest { @Test
public void test() {
// ApplicationContext ac = new ClassPathXmlApplicationContext("spring.xml");
// Service service = (Service)ac.getBean("service");
// service.save(); DomeStuTest dst = new DomeStuTest("spring.xml");
Service service = (Service)dst.get("service");
service.save();
Person person = (Person)dst.get("person");
person.showMessage();
} }
Spring入门学习(一)的更多相关文章
- Spring入门学习(一)
SpringMVC基础平台补充(2016.03.03) 如果想要开发SpringMVC,那么前期依次安装好:JDK(jdk-8u74-windows-x64,安装后配置环境变量JAVA_HOME和CL ...
- [Spring入门学习笔记][静态资源]
遗留问题 在上一节课的作业中,我们一定遇到了一点问题——虽然将页面内容正确的返回给了浏览器,但是浏览器显示的样式却是不正确的,这是因为在HTML的\标签中我们这样引入了CSS资源: <link ...
- [Spring入门学习笔记][创建网站URL]
设计网站的URL 现代的Web站点都会设计一套拥有明确意义,方便用户记忆的URL,不论是域名还是路径,以天码营为例: http://tianmaying.com/courses表示网站下所有的课程列表 ...
- [spring入门学习笔记][spring的IoC原理]
什么叫IoC 控制反转(Inversion of Control,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度.其中最常见的方式叫做依赖注入(Dependency ...
- Spring入门学习推荐
该作者的 spring 博客很好,作为学习用 简介 https://blog.csdn.net/column/details/15088.html?&page=1 https://blog.c ...
- [Spring入门学习笔记][Spring的AOP原理]
AOP是什么? 面向切面编程 软件工程有一个基本原则叫做“关注点分离”(Concern Separation),通俗的理解就是不同的问题交给不同的部分去解决,每部分专注于解决自己的问题.这年头互联网也 ...
- [Spring入门学习笔记][Spring Boot]
什么是Spring Boot Spring Boot正是在这样的一个背景下被抽象出来的开发框架,它本身并不提供Spring框架的核心特性以及扩展功能,只是用于快速.敏捷地开发新一代基于Spring框架 ...
- Spring入门学习(二)三种实例化bean的方法
前面的哪一种就是通过构造函数来实例化对象 下面我们可能用到工厂方法来视力话对象,这样我们的配置文件又该怎么配置呢 <bean name="service2" class=&q ...
- Spring入门学习笔记(4)——JDBC的使用
目录 Spring JDBC框架概览 JdbcTemplate类 配置数据源 数据访问对象(Data Access Object,DAO) 执行SQL命令 Spring JDBC框架概览 使用传统的J ...
随机推荐
- linux 查看磁盘占用情况
查看"/usr/local/"路径下,所有文件大小总和.只列出总和,不显示该路径下各子文件的大小. du -sh /usr/local/ 结果显示如下图: 如果要详细显示出各子文件 ...
- 利用python3.5 构建流媒体后台音视频切换的服务端程序
#!/usr/bin/env python3.5.0 # -*- coding:utf8 -*- import os,sys,socket,hashlib,time,select,threading, ...
- idea不能加载xml
- PHP的ip2long和long2ip函数的实现原理
最近要做个十进制数字的可逆转换做邀请码,一直没搞清楚怎么弄的,实在太复杂了,今天弄IP时想到这个可以进行转换,于是研究了下原理: 主要是自己整理了下: $ip = '12.34.56.78'; $ip ...
- USACO 3.3 Shopping Offers
Shopping OffersIOI'95 In a certain shop, each kind of product has an integer price. For example, the ...
- js---疑点代码段解析
function count() { var arr = []; for (var i=1; i<=3; i++) { console.log("iii---"+i); ar ...
- 注意Thread.interrupt()方法的真正作用并不是用来中断线程
程序是很简易的.然而,在编程人员面前,多线程呈现出了一组新的难题,如果没有被恰当的解决,将导致意外的行为以及细微的.难以发现的错误. 在本篇文章中,我们针对这些难题之一:如何中断一个正在 ...
- Python学习笔记——基础篇【第二周】——解释器、字符串、列表、字典、主文件判断、对象
目录 1.Python介绍 2.Python编码 3.接受执行传参 4.基本数据类型常用方法 5.Python主文件判断 6.一切事物都是对象 7. int内部功能介绍 8.float和long内 ...
- Java资源大全中文版
awesome-java-cn 是 Java 资源大全的中文版,包括开发库.开发工具.网站.博客等,将由伯乐在线持续更新. https://github.com/jobbole/awesome-jav ...
- sharepoint:各种阀值
//来源:http://www.cnblogs.com/jindahao/archive/2012/04/25/2469791.html 引用自JonyZhu,如下: 技术参数 值 列表最大记录数 5 ...