Ⅰ.Spring的点点滴滴--序章
spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架
.net篇(环境为vs2012+Spring.Core.dll)
新建一个控制台
using Spring.Context;
using Spring.Context.Support;
using System;
namespace SpringBase{
class Program {
static void Main(string[] args){
IoCMethod();
Console.ReadLine();
}
private static void IoCMethod() {
IApplicationContext ctx = ContextRegistry.GetContext("test");
IPersonDao dao = ctx.GetObject("PersonDao") as IPersonDao;
if (dao != null) {
dao.sayhello();
}
}
}
public class PersonDao : IPersonDao {
public void sayhello() {
Console.WriteLine("hello");
}
}
public interface IPersonDao{
void sayhello();
}
}添加2个配置文件
app.config(如果是web项目肯定是web.config)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
<sectionGroup name="spring">
<section name="typeAliases"
type="Spring.Context.Support.TypeAliasesSectionHandler, Spring.Core"/>
<section name="context"
type="Spring.Context.Support.ContextHandler, Spring.Core" />
<section name="objects"
type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>
</configSections>
<spring>
<typeAliases>
<alias name="PersonDaoAlias" type="SpringBase.PersonDao,SpringBase" />
</typeAliases>
<context name="test">
<resource uri="config://spring/objects" />
<!--<resource uri="file://objects.xml" />-->
</context>
<objects xmlns="http://www.springframework.net">
<description>一个简单的控制反转例子</description>
<object id="PersonDao" type="PersonDaoAlias" singleton="false" />
</objects>
</spring>
</configuration>objects.xml
<objects xmlns="http://www.springframework.net">
<description>一个简单的控制反转例子</description>
<object id="PersonDao" type="SpringBase.PersonDao, SpringBase" />
</objects>当app.config的resource选择为注释掉的那一条的时候,
资源配置文件为当前目录下的objects.xml文件,
里面的xmlns属性是对节点的规范在vs中会自动提示节点
- file://表示文件目录并且是相对于程序的目录
- config://表示的是配置节点上的某个节点,
- typeAliases表示type的别名,所以配置文件和xml文件上面的type参数不一样,
但是2个文件的效果是一样的- singleton参数表示这个实例是否为单例,默认为true
- id为程序中所调用这个实例的name,
也可以设置为name="PersonDao" type="PersonDaoAlias"效果是一样的- 当配置节点中context只有一个的时候可以不添加name属性,
程序中直接通过ContextRegistry.GetContext()获得程序的上下文
java篇(环境为Maven+Jdk1.7)
新建一个空的maven项目,在pom.xml文件配置
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>springbase</groupId>
<artifactId>springdemo</artifactId>
<version>1</version>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.4.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
</project>在META-INF下的MANIFEST.MF文件配置当main函数和引用的jar包
Manifest-Version: 1.0
Class-Path: lib/aopalliance-1.0.jar lib/commons-logging-1.1.1.jar lib/
spring-aop-3.2.4.RELEASE.jar lib/spring-beans-3.2.4.RELEASE.jar lib/s
pring-context-3.2.4.RELEASE.jar lib/spring-core-3.2.4.RELEASE.jar lib
/spring-expression-3.2.4.RELEASE.jar
Main-Class: springdemo.SpringBase新建一个类一个接口一个main入口
IPersonDao.java
package springdemo;
public interface IPersonDao {
void sayhello();
}PersonDao.java
package springdemo;
public class PersonDao implements IPersonDao {
public void sayhello() {
System.out.println("Hello World!");
}
}SpringBase.java
package springdemo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
public class SpringBase {
public static void main(String[] args) {
ApplicationContext ctx =
new FileSystemXmlApplicationContext("classpath:bean.xml");
IPersonDao dao = (IPersonDao) ctx.getBean("PersonDao");
if (dao != null) {
dao.sayhello();
}
}
}以及一个和csharp差不多的配置文件
bean.xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="PersonDao" class="springdemo.PersonDao" singleton="false"/>
</beans>然后mark当前模块会输出一个jar包,
在cmd上面输入java -jar springdemo.jar就可以看到helloword
的效果(前面附带一些spring的实例化日志)
- classpath表示是项目的目录下的文件,当然也存在file://等一系列的地址规范
- singleton表示当前对象是否为单例,默认为false和C#一样
- id也可以用name属性和效果是一样的
从上面可以看出java和c#几乎是一样的,几乎类名的都不多,
而且我们实例化一个对象可以直接通过xml来配置,而不需要改代码
- 下一篇:Ⅱ.spring的点点滴滴--对象
- 本文链接地址:Ⅰ.Spring的点点滴滴--序章
Ⅰ.Spring的点点滴滴--序章的更多相关文章
- Ⅱ.spring的点点滴滴--对象
承接上文 对象的各种实例化 .net篇(环境为vs2012+Spring.Core.dll) 修改原来的PersonDao对象为 public class PersonDao : IPersonDao ...
- .Net 中的反射(序章) - Part.1
引言 反射是.Net提供给我们的一件强力武器,尽管大多数情况下我们不常用到反射,尽管我们可能也不需要精通它,但对反射的使用作以初步了解在日后的开发中或许会有所帮助. 反射是一个庞大的话题,牵扯到的知识 ...
- Asp.Net MVC4 + Oracle + EasyUI 学习 序章
Asp.Net MVC4 + Oracle + EasyUI 序章 -- 新建微软实例 本文链接:http://www.cnblogs.com/likeli/p/4233387.html 1. 简 ...
- Ⅳspring的点点滴滴--方法和事件
承接上文 方法和事件 .net篇(环境为vs2012+Spring.Core.dll v1.31) public abstract class MethodDemo { protected abstr ...
- Ⅲ.spring的点点滴滴--赋值
承接上文 对象的赋值(调用方式都一样不再阐述) .net篇(环境为vs2012+Spring.Core.dll v1.31) public class PropertyDemo{ public Sys ...
- XI.spring的点点滴滴--IObjectFactoryPostProcessor(工厂后处理器)
承接上文 IObjectFactoryPostProcessor(工厂后处理器)) 前提是实现接口的对象注册给当前容器 直接继承的对象调用这个postProcessBeanFactory方法,参数为工 ...
- Ⅹ.spring的点点滴滴--IObjectPostProcessor(对象后处理器)
承接上文 IObjectPostProcessor(对象后处理器) 前提是实现接口的对象注册给当前容器 C#: 通过继承AbstractObjectFactory对象的AddObjectPostPro ...
- Ⅸ.spring的点点滴滴--IObjectFactory与IFactoryObject的杂谈
承接上文 ObjectFactory与IFactoryObject的杂谈 .net篇(环境为vs2012+Spring.Core.dll v1.31) public class parent { pu ...
- Ⅷ.spring的点点滴滴--抽象对象和子对象
承接上文 抽象对象和子对象 .net篇(环境为vs2012+Spring.Core.dll v1.31) public class parent { public string Name { get; ...
随机推荐
- NopCommerce架构分析之八------多语言
系统支持的语言是有类:Language表示: 多语言资源对应的类为:LocalizedProperty: 当先选择某种语言存储在类中:GenericAttribute: 多语言可以导出为XML文件,当 ...
- 实体框架Entity Framework 4.1快速入门
介 绍 在旧的Entity 框架中,开发者可以从已存在的数据库中产生业务实体的模型,这种开发方法被称为数据库驱动的开发方法.而在4.1的Entity Framework中,支开发者先创建实体业务类,然 ...
- memcached 学习笔记
memcached是高性能的分布式内存缓存服务器.一般的使用目的是,通过缓存数据库查询结果,减少数据库访问次数,以提高动态应用的速度.提高可扩展性. Memcached基于一个存储键/值对的hashm ...
- 《GettingThingsDone》--GTD学习笔记(一)-GTD理论
利用春节假期阅读了<Getting Things Done>一书,下文整理了下阅读过程中做的读书笔记和心得. ==GTD理论== 一. 目的: 1. 收集需要处理的事情把它置于一个脱离大脑 ...
- USB模式安装CentOS6.4_minimal
首先说明一下我遇到的3个问题 1. 由于机器没有光驱,所以只能USB安装 2.由于CentOS5.0+才对USB安装支持比较好,所以USB安装,建议安装CentOS5.0+以上的版本 3.由于FAT3 ...
- 在win64位,python64位2.7版本中安装pyHook
今天看了一篇博文说的是利用pyhook监听键盘鼠标事件(感兴趣的可以看博客园中相关文章),文章中使用的pyHook模块的官方下载地址是:http://sourceforge.net/projects/ ...
- 【Kafka入门】搭建Kafka本地环境
本博文介绍如何一步步搭建起Kafka本地环境. 下载Kafka 0.9.0.0 并配置软链接 下载好后,放入电脑本地安装目录,mac下我放在/usr/local下,解压Kafka. -0.9.0.0. ...
- 洛谷 P1373 小a和uim之大逃离
2016-05-30 12:31:59 题目链接: P1373 小a和uim之大逃离 题目大意: 一个N*M的带权矩阵,以任意起点开始向右或者向下走,使得奇数步所得权值和与偶数步所得权值和关于K的余数 ...
- FZU 2176 easy problem (DFS序+树状数组)
对于一颗树,dfs遍历为每个节点标号,在进入一个树是标号和在遍历完这个树的子树后标号,那么子树所有的标号都在这两个数之间,是一个连续的区间.(好神奇~~~) 这样每次操作一个结点的子树时,在每个点的开 ...
- 基于redis的IP地址快速查询
在一些大数据处理中,我们需要用到IP地址查询,一般为了查询一个IP属于哪个地址,我们通常需要根据一个IP数据库来查询,网络上比较常用的IP库是纯真IP数据库.IP数据库里面的记录一般存储方式为IP的开 ...