文档库 最新最全的文档下载
当前位置:文档库 › Spring中文开发详细手册

Spring中文开发详细手册

Spring中文开发详细手册
Spring中文开发详细手册

Spring开发教程

Spring教程 (1)

Spring框架概述 (2)

Spring是什么? (2)

Spring的历史 (3)

Spring的使命(Mission Statement) (3)

Spring受到的批判 (3)

Spring包含的模块 (4)

总结 (5)

Spring的IoC容器 (6)

用户注册的例子 (6)

面向接口编程 (7)

(用户持久化类)重构第一步——面向接口编程 (8)

重构第二步——工厂(Factory)模式 (9)

重构第三步——工厂(Factory)模式的改进 (9)

重构第四步-IoC容器 (10)

控制反转(IoC)/依赖注入(DI) (10)

什么是控制反转/依赖注入? (10)

依赖注入的三种实现形式 (11)

BeanFactory (13)

BeanFactory管理Bean(组件)的生命周期 (14)

Bean的定义 (15)

Bean的之前初始化 (19)

Bean的准备就绪(Ready)状态 (21)

Bean的销毁 (21)

ApplicationContext (21)

Spring的AOP框架 (21)

Spring的数据层访问 (21)

Spring的声明式事务 (21)

Spring对其它企业应用支持 (22)

名词解释

容器:

框架:

框架

容器

组件:

服务:

Spring框架概述

主要内容:介绍Spring的历史,Spring的概论和它的体系结构,重点阐述它在J2EE中扮演的角色。

目的:让学员全面的了解Spring框架,知道Spring框架所提供的功能,并能将Spring 框架和其它框架(WebWork/Struts、hibernate)区分开来。

Spring是什么?

Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring 的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。

?目的:解决企业应用开发的复杂性

?功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能

?范围:任何Java应用

简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。

■轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。

■控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。

■面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务()管理)进行内聚性的开发。应用对象只实

现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。

■容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean 可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。

■框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。

所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。

Spring的历史

Spring的基础架构起源于2000年早期,它是Rod Johnson在一些成功的商业项目中构建的基础设施。

在2002后期,Rod Johnson发布了《Expert One-on-One J2EE Design and Development》一书,并随书提供了一个初步的开发框架实现——interface21开发包,interface21就是书中阐述的思想的具体实现。后来,Rod Johnson 在interface21 开发包的基础之上,进行了进一步的改造和扩充,使其发展为一个更加开放、清晰、全面、高效的开发框架——Spring。

2003年2月Spring框架正式成为一个开源项目,并发布于SourceForge中。

Spring的使命(Mission Statement)

?J2EE应该更加容易使用。

?面向对象的设计比任何实现技术(比如J2EE)都重要。

?面向接口编程,而不是针对类编程。Spring将使用接口的复杂度降低到零。(面向接口编程有哪些复杂度?)

?代码应该易于测试。Spring框架会帮助你,使代码的测试更加简单。

?JavaBean提供了应用程序配置的最好方法。

?在Java中,已检查异常(Checked exception)被过度使用。框架不应该迫使你捕获不能恢复的异常。

Spring受到的批判

Spring不是一个“标准”。Spring不是J2EE规范的一部分,没有通过JCP(Java Community Process)的审核认可。

批判来源于EJB的支持者,他们认为EJB是一个标准,是J2EE规范的一部分。当然,标准最主要的目的是希望在应用服务器之间是可移植的,可是EJB的移植却并不

轻松,不同应用服务器的ejb部署描述文件总是有着差异。而且EJB开发的类完全依赖于EJB容器。而Spring对其管理的Bean没有任何形式的侵入,这样的Bean是普通Java 对象(POJO),那么它就遵循Java标准,可以到处移植。

Spring是“超重量级”的。

Spring涉及的内容确实很多(例如:提供了对jdbc、ORM、远程访问等等的支持),但其本质还是Java技术的庞大。Spring只是为了这些技术提供更好的使用方案而已。同时,你可以只选取你需要使用的部分。

Spring包含的模块

Spring框架由七个定义明确的模块组成(图1.1)。

(Spring框架概览图)

如果作为一个整体,这些模块为你提供了开发企业应用所需的一切。但你不必将应用完全基于Spring框架。你可以自由地挑选适合你的应用的模块而忽略其余的模块。

就像你所看到的,所有的Spring模块都是在核心容器之上构建的。容器定义了Bean是如何创建、配置和管理的——更多的Spring细节。当你配置你的应用时,你会潜在地使用这些类。但是作为一名开发者,你最可能对影响容器所提供的服务的其它模块感兴趣。这些模块将会为你提供用于构建应用服务的框架,例如AOP和持久性。

核心容器

这是Spring框架最基础的部分,它提供了依赖注入(Dependency Injection)特征来实现容器对Bean的管理。这里最基本的概念是BeanFactory,它是任何Spring应用的核心。BeanFactory是工厂模式的一个实现,它使用IoC将应用配置和依赖说明从实际的应用代码中分离出来。

应用上下文(Context)模块

核心模块的BeanFactory使Spring成为一个容器,而上下文模块使它成为一个框架。这个模块扩展了BeanFactory的概念,增加了对国际化(I18N)消息、事件传播以及验证的支持。

另外,这个模块提供了许多企业服务,例如电子邮件、JNDI访问、EJB集成、远程以及时序调度(scheduling)服务。也包括了对模版框架例如V elocity和FreeMarker集成的支持。

Spring的AOP模块

Spring在它的AOP模块中提供了对面向切面编程的丰富支持。这个模块是在Spring应用中实现切面编程的基础。为了确保Spring与其它AOP框架的互用性,Spring的AOP支持基于AOP联盟定义的API。AOP联盟是一个开源项目,它的目标是通过定义一组共同的接口和组件来促进AOP的使用以及不同的AOP实现之间的互用性。通过访问他们的站点http://aopalliance. https://www.wendangku.net/doc/2f13832836.html,,你可以找到关于AOP联盟的更多内容。

Spring的AOP模块也将元数据编程引入了Spring。使用Spring的元数据支持,你可以为你的源代码增加注释,指示Spring在何处以及如何应用切面函数。

JDBC抽象和DAO模块

使用JDBC经常导致大量的重复代码,取得连接、创建语句、处理结果集,然后关闭连接。Spring的JDBC和DAO模块抽取了这些重复代码,因此你可以保持你的数据库访问代码干净简洁,并且可以防止因关闭数据库资源失败而引起的问题。

这个模块还在几种数据库服务器给出的错误消息之上建立了一个有意义的异常层。使你不用再试图破译神秘的私有的SQL错误消息!

另外,这个模块还使用了Spring的AOP模块为Spring应用中的对象提供了事务管理服务。

对象/关系映射集成模块(zhouzhou)

对那些更喜欢使用对象/关系映射工具而不是直接使用JDBC的人,Spring提供了ORM 模块。Spring并不试图实现它自己的ORM解决方案,而是为几种流行的ORM框架提供了集成方案,包括Hibernate、JDO和iBA TIS SQL映射。Spring的事务管理支持这些ORM框架中的每一个也包括JDBC。

Spring的W eb模块

Web上下文模块建立于应用上下文模块之上,提供了一个适合于Web应用的上下文。另外,这个模块还提供了一些面向服务支持。例如:实现文件上传的multipart请求,它也提供了Spring和其它Web框架的集成,比如Struts、WebWork。

Spring的MVC框架

Spring为构建Web应用提供了一个功能全面的MVC框架。虽然Spring可以很容易地与其它MVC框架集成,例如Struts,但Spring的MVC框架使用IoC对控制逻辑和业务对象提供了完全的分离。

它也允许你声明性地将请求参数绑定到你的业务对象中,此外,Spring的MVC框架还可以利用Spring的任何其它服务,例如国际化信息与验证。

总结

Spring带来了复杂的J2EE开发的春天。它的核心是轻量级的IoC容器,它的目标是为J2EE应用提供了全方位的整合框架,在Spring框架下实现多个子框架的组合,这些子框架之间可以彼此独立,也可以使用其它的框架方案加以代替,Spring希望为企业应用提供一站式(one-stop shop)的解决方案。

Spring的IoC容器

主要内容:从最基本的面向接口编程逐步引入IoC设计模式(以银行卡:Card为例,接口-单例-工厂方法-IoC);详细介绍IoC的三种实现,并对其优、缺点进行比较;

之后开始引入Spring的IoC容器,详细介绍如何使用Spring的IoC容器组织业务组件。 目的:使学员真正理解IoC的概念、优点,并掌握Spring IoC容器的使用。

用户注册的例子

我们先看看更进一步的需求:实现一个用户注册信息持久化的类。

功能:

1、保存用户注册的信息;

2、根据用户的名称获得该注册用户。

虽然功能简单,但它对持久化方式的要求却非常的灵活:

1、在内存中持久化,供测试、演示使用。

2、如果用户的数据很少,将用户信息持据化到文本文件中。

3、如果用户信息很多,并需要一些灵活的查询,则需要使用JDBC技术将用将用户信息持

久化到数据库中。

4、面对企业复杂关联的数据,甚至需要使用持久层框架来实现用户信息的持久化,比如:

iBA TIS、Hibernate等。

如何去设计、实现我们这个持久化类呢?

我们遵循软件开发的原则“首先让它跑起来,再去优化(重构)它”,我们首先实现最简单的在内存中持久化用户信息。

既然我们要保存和取得用户信息,首先应该设计用户类。代码如下:

User.java

public class User {

private Long id;

private String name;

private String password;

private String group;

public User(String name,String password){

https://www.wendangku.net/doc/2f13832836.html, = name;

this.password = password;

}

//相应的get/set方法

………..

}

持久化类有两个方法,分别在内存中保存和获取User对象。代码如下:MemoryUserPersist.java

public class MemoryUserPersist {

private static Map users = new HashMap();

static{

User defaultAdmin = new User("Moxie","pass");

users.put(defaultAdmin.getName(),defaultAdmin);

}

public MemoryUserPersist (){

}

public void saveUser(User user){

users.put(user.getName(),user);

}

public User LoadUser(String userName){

return (User)users.get(userName);

}

}

用户持久化类完成之后,我们就可以在客户端UserRegister中使用它了。例如:用户注册时,UserRegister代码片断如下:

MemoryUserPersist userPersist = new MemoryUserPersist ();

userPersist.saveUser(user);

可是,现在如果要在文本文件中持久化User,又该如何实现呢?实现一个TextUserPersist 类,这个并不困难。但客户端代码将面临重大灾难:找到所有使用过MemoryUserPersist的客户端类,将他们中的MemoryUserPersist逐个手工修改为TextUserPersist,并且重新编译,当然以前的测试也必须全部从头来过!

人生的浩劫只是刚刚开始,因为根据前面的需求我们至少要分别实现四种持久化方式!这时,你一定和我一样在期待着救世主的早日降临——接口(Interface)。

面向接口编程

什么是接口?

?接口定义了行为的协议,这些行为在继承接口的类中实现。

?接口定义了很多方法,但是没有实现它们。类履行接口协议并实现所有定义在接口中的方法。

?接口是一种只有声明没有实现的特殊类。

接口的优点:

?Client不必知道其使用对象的具体所属类。

?一个对象可以很容易地被(实现了相同接口的)的另一个对象所替换。

?对象间的连接不必硬绑定(hardwire)到一个具体类的对象上,因此增加了灵活性。

?松散藕合(loosens coupling)。

?增加了重用的可能性。

接口的缺点:

设计的复杂性略有增加

(用户持久化类)重构第一步——面向接口编程

1、设计用户持久化类的接口UserDao,代码如下:

public interface UserDao {

public void save(User user);

public User load(String name);

}

2、具体的持久化来必须要继承UserDao接口,并实现它的所有方法。我们还是首先实现内

存持久化的用户类:

public class MemoryUserDao implements UserDao{

private static Map users = new HashMap();;

static{

User user = new User("Moxie","pass");

users.put(user.getName(),user);

}

public void save(User user) {

users.put(user.getId(),user);

}

public User load(String name) {

return (User)users.get(name);

}

}

MemoryUserDao的实现代码和上面的MemoryUserPersist基本相同,唯一区别是MemoryUserDao类继承了UserDao接口,它的save()和load()方法是实现接口的方法。

这时,客户端UserRegister的代码又该如何实现呢?

UserDao userDao = new MemoryUserDao();

userDao.save(user);

(注:面向对象“多态”的阐述)

如果我们再切换到文本的持久化实现TextUserDao,客户端代码仍然需要手工修改。虽然我们已经使用了面向对象的多态技术,对象userDao方法的执行都是针对接口的调用,但userDao对象的创建却依赖于具体的实现类,比如上面MemoryUserDao。这样我们并没有完全实现前面所说的“Client不必知道其使用对象的具体所属类”。

如何解决客户端对象依赖具体实现类的问题呢?

下面该是我们的工厂(Factory)模式出场了!

重构第二步——工厂(Factory)模式

我们使用一个工厂类来实现userDao对象的创建,这样客户端只要知道这一个工厂类就可以了,不用依赖任何具体的UserDao实现。创建userDao对象的工厂类UserDaoFactory代码如下:

public class UserDaoFactory {

public static UserDao createUserDao(){

return new MemoryUserDao();

}

}

客户端UserRegister代码片断如下:

UserDao userDao = UserDaoFactory. CreateUserDao();

userDao.save(user);

现在如果再要更换持久化方式,比如使用文本文件持久化用户信息。就算有再多的客户代码调用了用户持久化对象我们都不用担心了。因为客户端和用户持久化对象的具体实现完全解耦。我们唯一要修改的只是一个UserDaoFactory类。

重构第三步——工厂(Factory)模式的改进

到这里人生的浩劫已经得到了拯救。但我们仍不满足,因为假如将内存持久化改为文本文件持久化仍然有着硬编码的存在——UserDaoFactory类的修改。代码的修改就意味着重新编译、打包、部署甚至引入新的Bug。所以,我们不满足,因为它还不够完美!

如何才是我们心目中的完美方案?至少要消除更换持久化方式时带来的硬编码。具体实现类的可配置不正是我们需要的吗?我们在一个属性文件中配置UserDao的实现类,例如:在属性文件中可以这样配置:userDao = com.test.MemoryUserDao。UserDao的工厂类将从这个属性文件中取得UserDao实现类的全名,再通过Class.forName(className).newInstance()语句来自动创建一个UserDao接口的具体实例。UserDaoFactory代码如下:

public class UserDaoFactory {

public static UserDao createUserDao(){

String className = "";

// ……从属性文件中取得这个UserDao的实现类全名。

UserDao userDao = null;

try {

userDao = (UserDao)Class.forName(className).newInstance();

} catch (Exception e) {

e.printStackTrace();

}

return userDao;

}

通过对工厂模式的优化,我们的方案已近乎完美。如果现在要更换持久化方式,不需要再做任何的手工编码,只要修改配置文件中的userDao实现类名,将它设置为你需要更换的

持久化类名即可。

我们终于可以松下一口气了?不,矛盾仍然存在。我们引入了接口,引入了工厂模式,让我们的系统高度的灵活和可配置,同时也给开发带来了一些复杂度:1、本来只有一个实现类,后来却要为这个实现类引入了一个接口。2、引入了一个接口,却还需要额外开发一个对应的工厂类。3、工厂类过多时,管理、维护非常困难。比如:当UserDao的实现类是JdbcUserDao,它使用JDBC技术来实现用户信息从持久化。也许要在取得JdbcUserDao实例时传入数据库Connection,这是仍少UserDaoFactory的硬编码。

当然,面接口编程是实现软件的可维护性和可重用行的重要原则已经勿庸置疑。这样,第一个复杂度问题是无法避免的,再说一个接口的开发和维护的工作量是微不足道的。但后面两个复杂度的问题,我们是完全可以解决的:工厂模式的终极方案——IoC模式。

重构第四步-IoC容器

使用IoC容器,用户注册类UserRegister不用主动创建UserDao实现类的实例。由IoC 容器主动创建UserDao实现类的实例,并注入到用户注册类中。我们下面将使用Spring提供的IoC容器来管理我们的用户注册类。

用户注册类UserRegister的部分代码如下:

public class UserRegister {

private UserDao userDao = null;//由容器注入的实例对象

public void setUserDao(UserDao userDao){

https://www.wendangku.net/doc/2f13832836.html,erDao = userDao;

}

// UserRegister的业务方法

}

在其它的UserRegister方法中就可以直接使用userDao对象了,它的实例由Spring容器主动为它创建。但是,如何组装一个UserDao的实现类到UserRegister中呢?哦,Spring提供了配置文件来组装我们的组件。Spring的配置文件applicationContext.xml代码片断如下:

控制反转(IoC)/依赖注入(DI)

什么是控制反转/依赖注入?

控制反转(IoC=Inversion of Control)IoC,用白话来讲,就是由容器控制程序之间的(依赖)关系,而非传统实现中,由程序代码直接操控。这也就是所谓“控制反转”的概念所在:

(依赖)控制权由应用代码中转到了外部容器,控制权的转移,是所谓反转。

IoC也称为好莱坞原则(Hollywood Principle):“Don’t call us, we’ll call you”。即,如果大腕明星想演节目,不用自己去找好莱坞公司,而是由好莱坞公司主动去找他们(当然,之前这些明星必须要在好莱坞登记过)。

正在业界为IoC争吵不休时,大师级人物Martin Fowler也站出来发话,以一篇经典文章《Inversion of Control Containers and the Dependency Injection pattern》为IoC正名,至此,IoC又获得了一个新的名字:“依赖注入(Dependency Injection)”。

相对IoC 而言,“依赖注入”的确更加准确的描述了这种古老而又时兴的设计理念。从名字上理解,所谓依赖注入,即组件之间的依赖关系由容器在运行期决定,形象的来说,即由容器动态的将某种依赖关系注入到组件之中。

例如前面用户注册的例子。UserRegister依赖于UserDao的实现类,在最后的改进中我们使用IoC容器在运行期动态的为UserRegister注入UserDao的实现类。即UserRegister对UserDao的依赖关系由容器注入,UserRegister不用关心UserDao的任何具体实现类。如果要更改用户的持久化方式,只要修改配置文件applicationContext.xm即可。

依赖注入机制减轻了组件之间的依赖关系,同时也大大提高了组件的可移植性,这意味着,组件得到重用的机会将会更多。

依赖注入的三种实现形式

我们将组件的依赖关系由容器实现,那么容器如何知道一个组件依赖哪些其它的组件呢?例如用户注册的例子:容器如何得知UserRegister依赖于UserDao呢。这样,我们的组件必须提供一系列所谓的回调方法(这个方法并不是具体的Java类的方法),这些回调方法会告知容器它所依赖的组件。根据回调方法的不同,我们可以将IoC分为三种形式:

Type1-接口注入(Interface Injection)

它是在一个接口中定义需要注入的信息,并通过接口完成注入。Apache A valon是一个较为典型的Type1型IOC容器,WebWork框架的IoC容器也是Type1型。

当然,使用接口注入我们首先要定义一个接口,组件的注入将通过这个接口进行。

我们还是以用户注册为例,我们开发一个InjectUserDao接口,它的用途是将一个UserDao实例注入到实现该接口的类中。InjectUserDao接口代码如下:

public interface InjectUserDao {

public void setUserDao(UserDao userDao);

}

UserRegister需要容器为它注入一个UserDao的实例,则它必须实现InjectUserDao接口。

UserRegister部分代码如下:

public class UserRegister implements InjectUserDao{

private UserDao userDao = null;//该对象实例由容器注入

public void setUserDao(UserDao userDao) {

https://www.wendangku.net/doc/2f13832836.html,erDao = userDao;

}

// UserRegister的其它业务方法

}

同时,我们需要配置InjectUserDao接口和UserDao的实现类。如果使用WebWork框架则配置文件如下:

request

com.dev.spring.simple.MemoryUserDao

com.dev.spring.simple.InjectUserDao

这样,当IoC容器判断出UserRegister组件实现了InjectUserDao接口时,它就将MemoryUserDao实例注入到UserRegister组件中。

Type2-设值方法注入(Setter Injection)

在各种类型的依赖注入模式中,设值注入模式在实际开发中得到了最广泛的应用(其中很大一部分得力于Spring框架的影响)。

基于设置模式的依赖注入机制更加直观、也更加自然。前面的用户注册示例,就是典型的设置注入,即通过类的setter方法完成依赖关系的设置。

Type3-构造子注入(Constructor Injection)

构造子注入,即通过构造函数完成依赖关系的设定。将用户注册示例该为构造子注入,UserRegister代码如下:

public class UserRegister {

private UserDao userDao = null;//由容器通过构造函数注入的实例对象

public UserRegister(UserDao userDao){

https://www.wendangku.net/doc/2f13832836.html,erDao = userDao;

}

//业务方法

}

几种依赖注入模式的对比总结

接口注入模式因为历史较为悠久,在很多容器中都已经得到应用。但由于其在灵活性、易用性上不如

其他两种注入模式,因而在IOC的专题世界内并不被看好。

Type2和Type3型的依赖注入实现则是目前主流的IOC实现模式。这两种实现方式各有

特点,也各具优势。

Type2 设值注入的优势 1. 对于习惯了传统JavaBean 开发的程序员而言,通过setter 方法设定依赖关系显得更加直观,更加自然。

2. 如果依赖关系(或继承关系)较为复杂,那么Type3模式的构造函数也会相当庞大(我们需要在构造函数中设定所有依赖关系),此时Type2模式往往更为简洁。

3. 对于某些第三方类库而言,可能要求我们的组件必须提供一个默认的构造函数(如Struts 中的Action ),此时Type3类型的依赖注入机制就体现出其局限性,难以完成我们期望的功能。

Type3 构造子注入的优势:

1. “在构造期即创建一个完整、合法的对象”,对于这条Java 设计原则,Type3无疑是最好的响应者。

2. 避免了繁琐的setter 方法的编写,所有依赖关系均在构造函数中设定,依赖关系集中呈现,更加易读。

3. 由于没有setter 方法,依赖关系在构造时由容器一次性设定,因此组件在被创建之后即处于相对“不变”的稳定状态,无需担心上层代码在调用过程中执行setter 方法对组件依赖关系产生破坏,特别是对于Singleton 模式的组件而言,这可能对整个系统产生重大的影响。

4. 同样,由于关联关系仅在构造函数中表达,只有组件创建者需要关心组件内部的依赖关系。对调用者而言,组件中的依赖关系处于黑盒之中。对上层屏蔽不必要的信息,也为系统的层次清晰性提供了保证。

5. 通过构造子注入,意味着我们可以在构造函数中决定依赖关系的注入顺序,对于一个大量依赖外部服务的组件而言,依赖关系的获得顺序可能非常重要,比如某个依赖关系注入的先决条件是组件的UserDao 及相关资源已经被设定。

可见,Type3和Type2模式各有千秋,而Spring 、PicoContainer 都对Type3和Type2类型的依赖注入机制提供了良好支持。这也就为我们提供了更多的选择余地。理论上,以Type3类型为主,辅之以Type2类型机制作为补充,可以达到最好的依赖注入效果,不过对于基于Spring Framework 开发的应用而言,Type2使用更加广泛。

BeanFactory

BeanFactory 是Spring 的“心脏”。它就是Spring IoC 容器的真面目。Spring 使用BeanFactory 来实例化、配置和管理Bean 。但是,在大多数情况我们并不直接使用BeanFactory ,而是使用ApplicationContext 。它也是BeanFactory 的一个实现,但是它添加了一系列“框架”的特征,比如:国际化支持、资源访问、事件传播等。ApplicationContext 我们将在后面章节中介绍。

BeanFactory 其实是一个接口-org.springframework.beans.factory.BeanFactory ,它可以配置和管理几乎所有的Java 类。当然,具体的工作是由实现BeanFactory 接口的实现类完成。我们最常用的BeanFactory 实现是org.springframework.beans.factory .xml.XmlBeanFactory 。它从

BeanFactory

ApplicationContext

XML文件中读取Bean的定义信息。当BeanFactory被创建时,Spring验证每个Bean的配置。当然,要等Bean创建之后才能设置Bean的属性。单例(Singleton)Bean在启动时就会被BeanFactory实例化,其它的Bean在请求时创建。根据BeanFactory的Java文档(Javadocs)介绍,“Bean定义的持久化方式没有任何的限制:LDAP、RDBMS、XML、属性文件,等等”。现在Spring已提供了XML文件和属性文件的实现。无疑,XML文件是定义Bean的最佳方式。

BeanFactory是初始化Bean和调用它们生命周期方法的“吃苦耐劳者”。注意,BeanFactory只能管理单例(Singleton)Bean的生命周期。它不能管理原型(prototype,非单例)Bean的生命周期。这是因为原型Bean实例被创建之后便被传给了客户端,容器失去了对它们的引用。

BeanFactory管理Bean(组件)的生命周期

下图描述了Bean的生命周期。它是由IoC容器控制。IoC容器定义Bean操作的规则,即Bean的定义(BeanDefinition)。Bean的定义包含了BeanFactory在创建Bean实例时需要的所有信息。BeanFactory首先通过构造函数创建一个Bean实例,之后它会执行Bean实例的一系列之前初始化动作,初始化结束Bean将进入准备就绪(ready)状态,这时应用程序就可以获取这些Bean实例了。最后,当你销毁单例(Singleton)Bean时,它会调用相应的销毁方法,结束Bean实例的生命周期。

(图-Bean的生命周期)

Bean的定义

前面的用户注册的例子中,我们已经使用Spring定义了一个用户持久化类:

这是一个最简单的Bean定义。它类似于调用了语句:MemoryUserDao userDao = new MemoryUserDao()。

id属性必须是一个有效的XML ID,这意味着它在整个XML文档中必须唯一。它是一个Bean的“终身代号(9527)”。同时你也可以用name属性为Bean定义一个或多个别名(用逗号或空格分开多个别名)。name属性允许出现任意非法的XML字母。例如:

class="com.dev.spring.simple.MemoryUserDao"/>。

class属性定义了这个Bean的全限定类名(包名+类名)。Spring能管理几乎所有

的Java类。一般情况,这个Java类会有一个默认的构造函数,用set方法设置依赖的属性。

Bean元素出了上面的两个属性之外,还有很多其它属性。说明如下:

id="beanId"(1)

name="beanName"(2)

class="beanClass"(3)

parent="parentBean"(4)

abstract="true | false"(5)

singleton="true | false"(6)

lazy-init="true | false | default"(7)

autowire="no | byName | byType | constructor | autodetect | default"(8)

dependency-check = "none | objects | simple | all | default"(9)depends-on="dependsOnBean"(10)

init-method="method"(11)

destroy-method="method"(12)

factory-method="method"(13)

factory-bean="bean">(14)

(1)、id: Bean的唯一标识名。它必须是合法的XML ID,在整个XML文档中唯一。(2)、name: 用来为id创建一个或多个别名。它可以是任意的字母符合。多个别名之间用逗号或空格分开。

(3)、class: 用来定义类的全限定名(包名+类名)。只有子类Bean不用定义该属性。(4)、parent: 子类Bean定义它所引用它的父类Bean。这时前面的class属性失效。子类Bean会继承父类Bean的所有属性,子类Bean也可以覆盖父类Bean的属性。注意:子类Bean和父类Bean是同一个Java类。

(5)、abstract(默认为”false”):用来定义Bean是否为抽象Bean。它表示这个Bean 将不会被实例化,一般用于父类Bean,因为父类Bean主要是供子类Bean继承使用。(6)、singleton(默认为“true”):定义Bean是否是Singleton(单例)。如果设为“true”,则在BeanFactory作用范围内,只维护此Bean的一个实例。如果设为“flase”,Bean将是Prototype(原型)状态,BeanFactory将为每次Bean请求创建一个新的Bean实例。

(7)、lazy-init(默认为“default”):用来定义这个Bean是否实现懒初始化。如果为“true”,它将在BeanFactory启动时初始化所有的Singleton Bean。反之,如果为“false”,它只在Bean请求时才开始创建Singleton Bean。

(8)、autowire(自动装配,默认为“default”):它定义了Bean的自动装载方式。

1、“no”:不使用自动装配功能。

2、“byName”:通过Bean的属性名实现自动装配。

3、“byType”:通过Bean的类型实现自动装配。

4、“constructor”:类似于byType,但它是用于构造函数的参数的自动组装。

5、“autodetect”:通过Bean类的反省机制(introspection)决定是使用

“constructor”还是使用“byType”。

(9)、dependency-check(依赖检查,默认为“default”):它用来确保Bean组件通过JavaBean描述的所以依赖关系都得到满足。在与自动装配功能一起使用时,它特别有用。

1、none:不进行依赖检查。

2、objects:只做对象间依赖的检查。

3、simple:只做原始类型和String类型依赖的检查

4、all:对所有类型的依赖进行检查。它包括了前面的objects和simple。(10)、depends-on(依赖对象):这个Bean在初始化时依赖的对象,这个对象会在这个Bean初始化之前创建。

(11)、init-method:用来定义Bean的初始化方法,它会在Bean组装之后调用。它必须是一个无参数的方法。

(12)、destroy-method:用来定义Bean的销毁方法,它在BeanFactory关闭时调用。同样,它也必须是一个无参数的方法。它只能应用于singleton Bean。

(13)、factory-method:定义创建该Bean对象的工厂方法。它用于下面的“factory-bean”,表示这个Bean是通过工厂方法创建。此时,“class”属性失效。(14)、factory-bean:定义创建该Bean对象的工厂类。如果使用了“factory-bean”则“class”属性失效。

配置Bean的属性值和Bean对象的组装

我们可以在Spring的配置文件中直接设置Bean的属性值。例如:你的Bean有一个“maxSize”属性,它表示每页显示数据的最大值,它有一个set方法。代码如下:private int maxSize;

public void setMaxSize(int maxSize) {

this.maxSize = maxSize;

}

这样,你可以在Bean定义时设置这个属性的值:

20

前面介绍了Bean原始类型的属性设置。这种方式已经可以非常有效而便利的参数化应用对象。然而,Bean工厂的真正威力在于:它可以根据bean属性中描述的对象依赖来组装

..(wire)bean实例。例如:userDao对象的一个属性“sessionFactory”引用了另外一个Bean 对象,即userDao对象实例依赖于sessionFactory对象:

class="org.springframework.orm.hibernate.LocalSessionFactoryBean">…..

在这个简单的例子中,使用元素引用了一个sessionFactory实例。在ref标签中,我们使用了一个“local”属性指定它所引用的Bean对象。除了local属性之外,还有一些其它的属性可以用来指定引用对象。下面列出元素的所有可用的指定方式:

bean:可以在当前文件中查找依赖对象,也可以在应用上下文(ApplicationContext)中查找其它配置文件的对象。

local:只在当前文件中查找依赖对象。这个属性是一个XML IDREF,所以它指定的对象必须存在,否则它的验证检查会报错。

external:在其它文件中查找依赖对象,而不在当前文件中查找。

总的来说,大部分的时候可以通用。“bean”是最灵活的方式,它允许你在多个文件之间共享Bean。而“local”则提供了便利的XML验证。

复杂的属性值

Spring的bean工厂不仅允许用String值和其他bean的引用作为bean组件的属性值,还支持更复杂的值,例如数组、java.util.List、java.util.Map和java.util.Properties。数组、set、list和map中的值不仅可以是String类型,也可以是其他bean的引用;map中的键、Properties的键和值都必须是String类型的;map中的值可以是set、list或者map类型。

例如:

Null:

List和数组:

ABC

123

Map:

ABC

123

Bean的之前初始化

Bean工厂使用Bean的构造函数创建Bean对象之后,紧接着它会做一件非常重要的工作——Bean的初始化。它会根据配置信息设置Bean的属性和依赖对象,执行相应的初始化方法。

自动装配

一般不推荐在大型的应用系统中使用自动装配。当然,它可以很好的用于小型应用系统。如果一个bean声明被标志为“autowire(自动装配)”,bean工厂会自动将其他的受管对象与其要求的依赖关系进行匹配,从而完成对象的装配——当然,只有当对象关系无歧义时才能完成自动装配。因为不需要明确指定某个协作对象,所以可以带来很多的便利性。

举个例子,如果在Bean工厂中有一个SessionFactory类型的实例,HibernateUserDao的sessionFactory属性就可以获得这个实例。这里可以使用的autowire属性,就象这样:

class="org.springframework.orm.hibernate.LocalSessionFactoryBean">…..

注意,在userDao的定义中并没有明确引用sessionFactory。由于它的“autowire”被设置为“byType”,所有只要userDao有一个类型为SessionFactory的属性并有一个set方法,Bean工厂就会自动将sessionFactory组装到userDao中。

如果一个应用有两个数据库,这时就对应有两个SessionFactory。这时autowire="byType"就无法使用了。我们可以使用另外一种自动装配方式“byName”。它将根据属性的名称来匹配依赖对象,这样如果你的配置文件中可以同时存在多个类型相同的SessionFactory,只要他们定义的名称不同就可以了。这种方式的缺点是:需要精确匹配Bean的名称,即必须要保证属性的名称和它所依赖的Bean的名称相等,这样比较容易出错。

(举例:Aa对象依赖Bb对象。)

注意:我们还是强烈推荐手工指定Bean之间的依赖关系。这种用法最强大,因为它允

许按名称引用特定的Bean实例,即使多个Bean具有相同类型也不会混淆。同时,你可

以清楚的知道一个Bean到底依赖哪些其它的Bean。如果使用自动装载,你只能去Bean

的代码中了解。甚至,Bean工厂也许会自动装载一些你根本不想依赖的对象。

依赖检查

如果你希望Bean严格的设置所有的属性,“dependency-check”(依赖检查)属性将会非常有用。它默认为“none”,不进行依赖检查。“simple”会核对所有的原始类型和String类型的属性。“objects”只做对象间的关联检查(包括集合)。“all”会检查所有的属性,包括“simple”和“objects”。

举个例子:一个Bean有如下的一个属性:

private int intV ar = 0;

public void setIntV ar(int intV ar) {

this.intV ar = intV ar;

}

这个Bean的配置文件设置了“dependency-check=”simple””。如果这个Bean的配置中没有定义这个属性“intV ar”,则在进行这个Bean的依赖检查时就会抛出异常:org.springframework.beans.factory.UnsatisfiedDependencyException。

setXXX()

set方法非常简单,它会给class注入所有依赖的属性。这些属性都必须是在配置文件中使用元素定义,它们可以是原始类型,对象类型(Integer,Long),null值,集合,其它对象的引用。

afterPropertiesSet()

有两种方法可以实现Bean的之前初始化方法。1、使用“init-method”属性,在Spring 的配置文件中定义回调方法。下面将会具体描述。2、实现接口InitializingBean并实现它的afterPropertiesSet()方法。接口InitializingBean的代码如下:

public interface InitializingBean {

void afterPropertiesSet() throws Exception;

}

在JavaBean的所有属性设置完成以后,容器会调用afterPropertiesSet()方法,应用对象可以在这里执行任何定制的初始化操作。这个方法允许抛出最基本的Exception异常,这样可以简化编程模型。

在Spring框架内部,很多bean组件都实现了这些回调接口。但我们的Bean组件最好不要通过这种方式实现生命周期的回调,因为它依赖于Spring的API。无疑,第一种方法是我们的最佳选择。

init-method

init-method的功能和InitializingBean接口一样。它定义了一个Bean的初始化方法,在Bean的所有属性设置完成之后自动调用。这个初始化方法不用依赖于Spring的任何API。它必须是一个无参数的方法,可以抛出Exception。

例如:我们的Bean组件UserManger中定义一个初始化方法init()。这样,我们就可以在Bean定义时指定这个初始化方法:

init-method=”init”>

……

PDMS中文教程结构建库

VPD VANTAGE Plant Design System 工厂三维布置设计管理系统 PDMS结构建库 培训手册

型钢库 PDMS已经提供了较完善的元件库,包括型材截面、配件和节点库。但不一定十分齐全,所以PDMS提供了非常方便的建库工具,这些功能都可在PARAGON中实现。 设计库、元件库和等级库之间的关系 等级库(Specificaion)是设计库与元件库之间的桥梁。设计者在等级库中选择元件后,等级中的元件自动找到对应的元件库中的元件;元件库中的几何形状和数据被设计库参考。如下图。 型钢库层次结构 型钢库World下包含了许多元件库和等级库,它们也是一种树状结构库。下图就是型钢库层次结构: 型钢等级库层次结构 等级库相当于元件库的索引,其目的是为设计人员提供一个选择元件的界面,它的层次结构既与界面的关系如下图所示。 本章主要内容: 1.定义型钢截面(Profile) 2.定义型钢配件(Fitting) 3.定义节点(Joint) 定义型钢截面(Profile) 练习一:定义型钢截面库 1.元件库最终的层次结构如下: 2.以管理员身份(如SYSTEM)登录PARAGON模块,再进入Paragon>Steelwork子模块。 3.在 4.选择菜单Create>Section,创建新的STSE, 5.在刚创建的STSE下,选择菜单Create>Element,创建三个元素:“ref.DTSE”、“ref.GMSS”和“ref.PTSS”。 现在的数据库结构如下: 6.设置。选择Settings>Referance Data… 和Display>Members…按下图设置: 7.鼠标指向CATA层,选择菜单Create>Section,创建新的STSE:example/PRFL/BOX。8.选择菜单Create>Category>For Profiles,创建新的STCA,如下图: 9.鼠标指向STCA:example/PRFL/REF.DTSE层,在命令行中键入命令:“NEW DTSE /BOX/EQUAL/DTSE”,这样新建了一个DTSE,如下图。 10.创建截面本身。选择菜单Create>Profile,按下图设置:

Plaxis中常见问题集锦

1 问:Geo FEM,Plaxis,Z-Soil软件比较? 2008/6/5 9:34:48 答:三者针对某个算例计算结果相差不大,误差在可接受范围之内。 就易用性来说,Plaxis好于Z-Soil好于GEO。Plaxis大家都用得很多了,Z-Soil的建模可以在前 处理模块中用CAD元素绘制,或者通过dxf文件导入;GEO4只能输入剖面线的坐标,比较烦琐。 Plaxis和Z-soil基本可以解决岩土工程所有问题,但GEO4由于建模功能的限制,只能解决隧道、 边坡等相关问题;Plaxis和Z-Soil可以进行渗流分析(非饱和)包括流固偶合分析。 总的来说,Plaxis和Z-Soil是专业的岩土工程有限元程序;GEO FEM是GEO4里面的一个工具 包,而GEO4类似于国内的理正一样,是遵循Eurocode的设计软件。 2 问:在plaxis中,用折减系数作出它的几个滑裂面,如何查看滑裂面的角度、圆心、半径等 这些滑裂面的相关参数呢? 2008/6/5 9:36:26 答:使用强度折减法,不用假定slip surface,故不会有这些数据。 3 问:Plaxis怎么模拟路堤分步填筑?在实际施工中,填筑不是一次加载的,可能先填一半, 过个月再填一半,而且这一半也不是一次填完,要在几天内完成,请问怎么在Plaxis中模拟,怎 么设置可以反应填筑速率,请高手指教? 2008/6/5 9:47:25 答:手册里有相关例子,你可以参考一下lesson 5。 堆载速率可以通过设置堆载这个stage的时间间隔来设置。如果只有基本模块,可以设置mstage 的数值。mstage=1.0,说明100%施加上去了,mstage=0.1,说明只有10%的荷载。由于Plaxis 不能设置load function,比较麻烦。当然,你可以将一层土细分成几个stage完成,也可以实现。 4 问:Plaxis 3D 用这个软件分析基坑时,基坑是钢格栅喷混凝土支护,支护用板来模拟,EI 和EA中的I和A分别指哪个面的惯性矩和面积,以及单位后面的/m应该是哪个长度? 2008/6/5 9:49:13 答:应该是:A=沿着洞轴方向L×厚度d E是弹性模量I是惯性矩 5 问:在网上看到有人怀疑Plaxis 3D Foundation和3D Tunnel的真三维性,有人说它们不是 真正的三维计算,有谁知道是怎么回事吗? 2008/6/5 9:59:42 答:Plaxis 3D Tunnel计算内核是三维的。但是目前只支持平面拉伸建模,建附加模型还存在困 难。3D Tunnel的确不能生成复杂的斜交隧道。 3D Foundation是专门解决基础问题的三维有限元计算软件。其解决基础问题要比FLAC3D要专 业,特别是考虑了一些工程实际,但开放性不如FLAC3d。近期3D Foundation将在此方面有重 大改进,新版本前处理借用GID作为前处理工具。Plaxis 系列优点长处是其理论,尤其是hs和 hs-small模型。 6 问:最近在算一个基坑,很好的地质条件,桩、撑刚度都取得很大,居然算出来水平位移始终 都有70mm左右,但用同济启明星算水土分算,并且参数都没有取最大值,算的结果只有17mm 左右。深圳规范要求水平位移不超过30mm,要是用Plaxis是很难算出小于规范值的结果的,事 实上,也不至于有那么大的位移的? 2008/6/5 10:05:32 答:主要问题是现在很多地质报告都不提供三轴的试验参数:例如E50模量,Eur模量,Es模量, 有效强度指标等;土体的本构参数比较特殊,要做特殊的试验,因此一般的项目参数方面的确有 问题。不过,即便是只有Es模量和直剪固快指标,通过换算和引入K0、孔隙比、Cc,Cs等其 他参数,也是可以得到其他需要的参数,不过这需要比较扎实的本构模型方面的知识和岩土工程 经验,知道不同的本构适合模拟什么土层,知道本构的优点和局限性,这对使用者的要求的确比 较高。 7 问:隧道已经组成一个类组,所以一定要对其进行材料定义。如果不定义得话,就不能对其 进行网格划分,这要怎么解决呢? 2008/6/5 10:08:42 答:你是不是只想模拟基坑开挖对既有隧道结构的影响,而省略掉前面隧道开挖过程的模拟。 这样的话,结果恐怕很难正确,而且会碰到你所说的问题。因为隧道在基坑开挖前,有一定的受

最新STM8L15X中文参考手册资料

本参考手册的目标应用程序开发人员。它提供了完整的信息如何使用stm8l05xx,stm8l15xx 和stm8l16xx微控制器的存储器和外围设备。 该stm8l05xx / stm8l15xx / stm8l16xx是一个家庭的不同存储密度的微控制器和外围设备。这些产品是专为超低功耗应用。可用的外设的完整列表,请参阅产品数据表。 订购信息,引脚说明,机械和电气设备的特点,请参阅产品数据表。 关于STM8 SWIM通信协议信息和调试模块,请参阅用户手册(um0470)。 在STM8的核心信息,请参阅STM8的CPU编程手册(pm0044)。关于编程,擦除和保护的内部快闪记忆体,请参阅STM8L闪存编程手册(pm0054)。

1 中央处理单元(CPU)。30。 1.1 引言30 1.2 CPU的寄存器。30。 1.2.1 描述CPU寄存器。..。30 1.2.2 STM8 CPU寄存器图。..。34 1.3 全球配置寄存器(cfg_gcr)。34。 1.3.1 激活水平。..。34 1.3.2 游泳禁用。..。35 1.3.3 描述全局配置寄存器(cfg_gcr)。..。35 1.3.4 全局配置寄存器图及复位值。..。35 2 启动ROM . . . 36 3程序存储器和数据存储器。37。 3.1引言37 3.2术语。37。 3.3个主要的快闪存储器的特点。38。 3.4记忆的组织。39。 3.4.1低密度设备的存储器组织。39 3.4.2介质密度的装置记忆的组织。..。40 3.4.3介质+密度装置记忆的组织。..。41 3.4.4高密度存储器组织。..。42 3.4.5专有代码区(译)。43 3.4.6用户区(UBC)。43 3.4.7数据的EEPROM(数据)。..。46 3.4.8主程序区。46 3.4.9选项字节。..。46 3.5内存保护。47。 3.5.1读出保护。47 3.5.2内存访问安全系统(质量)。47 3.5.3使写访问选项字节。49 3.6内存编程49 3.6.1同时读写(读写网)。..。49 2 / 573文档ID 15226转9 rm0031内容 3.6.2字节编程。..。49 3.6.3字编程。50 3.6.4块编程。50 3.6.5选项字节编程。52 Flash 3.7的低功耗模式。52。 3.8例ICP和IAP。52。 3.9闪光寄存器57 3.9.1闪光控制寄存器1(flash_cr1)。57 3.9.2闪光控制寄存器2(flash_cr2)。58

中文参考手册-PLAXIS 2D--岩土三维建模分析

参 考 手 册

目录 1简介 (7) 2 一般说明 (7) 2.2 文件处理 (9) 2.3 帮助工具 (9) 2.4 输入方法 (10) 3 输入前处理 (10) 3.1 输入程序 (10) 3.5 荷载和边界条件 (28) 4 材料属性和材料数据组 (33) 4.1 模拟土体及界面行为 (35) 4.1.1 一般标签页 (35) 4.1.2 参数标签页 (39) 4.1.3 渗流参数标签页 (50) 4.1.4 界面标签页 (56) 4.1.5 初始标签页 (61) 4.2 不排水行为模拟 (63) 4.2.1 不排水(A) (64) 4.2.2 不排水(B) (64) 4.2.3 不排水(C) (64) 4.3 土工试验模拟 (64) 4.3.1 三轴试验 (67) 4.3.2 固结仪试验 (68) 4.3.3 CRS (68) 4.3.4 DDS (69) 4.3.6 结果 (70) 4.4 板的材料数据组 (70) 4.4.1 材料数据组 (71) 4.4.2 属性 (71)

4.5.1 材料数据组 (74) 4.5.2 属性 (74) 4.6 锚杆的材料数据组 (75) 4.6.1 材料数据组 (76) 4.6.2 属性 (76) 4.7 几何构件的材料数据组赋值 (76) 5 计算 (77) 5.1 计算程序界面 (77) 5.2 计算菜单 (78) 5.3 计算模式 (79) 5.3.1 经典模式 (80) 5.3.2 高级模式 (80) 5.3.3 渗流模式 (81) 5.4 定义计算阶段 (81) 5.4.1 计算标签页 (81) 5.4.2 插入或删除计算阶段 (82) 5.4.3 计算阶段的标识和顺序 (82) 5.5 分析类型 (83) 5.5.1 初始应力生成 (83) 5.5.2 塑性计算 (85) 5.5.3塑性(排水)计算 (85) 5.5.4 固结(EPP)分析 (85) 5.5.5 固结(TPP)分析 (86) 5.5.6 安全性(PHI/C折减) (86) 5.5.7 动力分析 (87) 5.5.8 自由振动 (87) 5.5.9 地下水渗流(稳态) (88) 5.5.10 地下水渗流(瞬态) (88) 5.5.11 塑性零增长步 (88)

Plaxis中常见问题集锦

1 问:Geo FEM,Plaxis,Z-Soil软件比较?2008/6/5 9:34:48 答:三者针对某个算例计算结果相差不大,误差在可接受围之。 就易用性来说,Plaxis好于Z-Soil好于GEO。Plaxis大家都用得很多了,Z-Soil的建模可以在前处理模块中用CAD元素绘制,或者通过dxf文件导入;GEO4只能输入剖面线的坐标,比较烦琐。Plaxis和Z-soil基本可以解决岩土工程所有问题,但GEO4由于建模功能的限制,只能解决隧道、边坡等相关问题;Plaxis和Z-Soil可以进行渗流分析(非饱和)包括流固偶合分析。 总的来说,Plaxis和Z-Soil是专业的岩土工程有限元程序;GEO FEM是GEO4里面的一个工具包,而GEO4类似于国的理正一样,是遵循Eurocode的设计软件。 2 问:在plaxis中,用折减系数作出它的几个滑裂面,如何查看滑裂面的角度、圆心、半径等 这些滑裂面的相关参数呢? 2008/6/5 9:36:26 答:使用强度折减法,不用假定slip surface,故不会有这些数据。 3 问:Plaxis怎么模拟路堤分步填筑?在实际施工中,填筑不是一次加载的,可能先填一半, 过个月再填一半,而且这一半也不是一次填完,要在几天完成,请问怎么在Plaxis中模拟,怎么 设置可以反应填筑速率,请高手指教? 2008/6/5 9:47:25 答:手册里有相关例子,你可以参考一下lesson 5。 堆载速率可以通过设置堆载这个stage的时间间隔来设置。如果只有基本模块,可以设置mstage 的数值。mstage=1.0,说明100%施加上去了,mstage=0.1,说明只有10%的荷载。由于Plaxis 不能设置load function,比较麻烦。当然,你可以将一层土细分成几个stage完成,也可以实现。 4 问:Plaxis 3D 用这个软件分析基坑时,基坑是钢格栅喷混凝土支护,支护用板来模拟,EI 和EA中的I和A分别指哪个面的惯性矩和面积,以及单位后面的/m应该是哪个长度? 2008/6/5 9:49:13 答:应该是:A=沿着洞轴方向L×厚度d E是弹性模量I是惯性矩 5 问:在网上看到有人怀疑Plaxis 3D Foundation和3D Tunnel的真三维性,有人说它们不是 真正的三维计算,有谁知道是怎么回事吗? 2008/6/5 9:59:42 答:Plaxis 3D Tunnel计算核是三维的。但是目前只支持平面拉伸建模,建附加模型还存在困难。 3D Tunnel的确不能生成复杂的斜交隧道。 3D Foundation是专门解决基础问题的三维有限元计算软件。其解决基础问题要比FLAC3D要专 业,特别是考虑了一些工程实际,但开放性不如FLAC3d。近期3D Foundation将在此方面有重 大改进,新版本前处理借用GID作为前处理工具。Plaxis 系列优点长处是其理论,尤其是hs和 hs-small模型。 6 问:最近在算一个基坑,很好的地质条件,桩、撑刚度都取得很大,居然算出来水平位移始终 都有70mm左右,但用同济启明星算水土分算,并且参数都没有取最大值,算的结果只有17mm 左右。规要求水平位移不超过30mm,要是用Plaxis是很难算出小于规值的结果的,事实上,也 不至于有那么大的位移的? 2008/6/5 10:05:32 答:主要问题是现在很多地质报告都不提供三轴的试验参数:例如E50模量,Eur模量,Es模量, 有效强度指标等;土体的本构参数比较特殊,要做特殊的试验,因此一般的项目参数方面的确有 问题。不过,即便是只有Es模量和直剪固快指标,通过换算和引入K0、孔隙比、Cc,Cs等其 他参数,也是可以得到其他需要的参数,不过这需要比较扎实的本构模型方面的知识和岩土工程 经验,知道不同的本构适合模拟什么土层,知道本构的优点和局限性,这对使用者的要求的确比 较高。 7 问:隧道已经组成一个类组,所以一定要对其进行材料定义。如果不定义得话,就不能对其 进行网格划分,这要怎么解决呢? 2008/6/5 10:08:42 答:你是不是只想模拟基坑开挖对既有隧道结构的影响,而省略掉前面隧道开挖过程的模拟。 这样的话,结果恐怕很难正确,而且会碰到你所说的问题。因为隧道在基坑开挖前,有一定的受 力状况,这需要模拟隧道开挖过程才能得到其受力状况,基坑开挖的影响也是在其这个受力状况 上产生的。你现在的目的是让基坑开挖前,隧道结构的力和弯矩都为零了,所以结果很难正确。

地铁地表沉降外文翻译(适用于毕业论文外文翻译+中英文对照)

外文原文 Surface settlement predictions for Istanbul Metro tunnels excavated by EPB-TBM S. G. Ercelebi ?H. Copur ?I. Ocak Abstract In this study, short-term surface settlements are predicted for twin tunnels, which are to be excavated in the chainage of 0 ? 850 to 0 ? 900 m between the Esenler and Kirazl?stations of the Istanbul Metro line, which is 4 km in length. The total length of the excavation line is 21.2 km between Esenler and Basaksehir. Tunnels are excavated by employing two earth pressure balance (EPB) tunnel boring machines (TBMs) that have twin tubes of 6.5 m diameter and with 14 m distance from center to center. The TBM in the right tube follows about 100 m behind the other tube. Segmental lining of 1.4 m length is currently employed as the final support. Settlement predictions are performed with finite element method by using Plaxis finite element program. Excavation, ground support and face support steps in FEM analyses are simulated as applied in the field. Predictions are performed for a typical geological zone, which is considered as critical in terms of surface settlement. Geology in the study area is composed of fill, very stiff clay, dense sand, very dense sand and hard clay, respectively, starting from the surface. In addition to finite element modeling, the surface settlements are also predicted by using semi-theoretical (semi-empirical) and analytical methods. The results indicate that the FE model predicts well the short-term surface settlements for a given volume loss value. The results of semi-theoretical and analytical methods are found to be in good agreement with the FE model. The results of predictions are compared and verified by field measurements. It is suggested that grouting of the excavation void should be performed as fast as possible after excavation of a section as a precaution against surface settlements during excavation. Face pressure of the TBMs should be closely monitored and adjusted for different zones. Keywords Surface settlement prediction _ Finite element method _ Analytical method _ Semi-theoretical method _ EPB-TBM tunneling _ Istanbul Metro Introduction Increasing demand on infrastructures increases attention to shallow soft ground tunneling methods in urbanized areas. Many surface and sub-surface structures make underground construction works very delicate due to the influence of ground deformation, which should be definitely limited/controlled to acceptable levels. Independent of the excavation method, the short- and long-term surface and sub-surface ground deformations should be predicted and remedial precautions against any damage to existing structures planned prior to construction. Tunneling cost substantially increases due to damages to structures resulting from surface settlements, which are above tolerable limits (Bilgin et al. 2009).

STM8L152中文介绍

STM8L152介绍 8位超低功耗单片机,高达64 + 2字节数据的闪存EE PROM,EEPROM (Electrically Erasable Programmable ), 实时时钟,液晶显示器,定时器,USART,C,SPI,模数转换器,数模转换器,比较器特点:操作条件:工作电源:1.65v~ 3.6v 温度范围:40 to 85, 105 or 125 低功耗的特点:5个低功耗模式:等,低功率运行 (5.9|ì一),低功耗等(3|ì一),active-halt 全实时时钟(1.4|ì一),停止(400) 动态功率消耗:200UA/兆赫+ 330UA,快速唤醒从停止模式(4.7us) 超低漏 I/ O:50nA 先进的stm8核心: 哈佛结构和三级流水线

最大频率:16条16mhz,相关峰 最多40个外部中断源 复位和供应管理: 低功率,超安全欠压复位5可编程阈值 超低功率POR /PDR(通电复位/Protection(保护)、Detection(检测)、Response(响应)) 可编程电压检测器(Programmable voltage detector (PVD)) 时钟管理 32kHz和1-16MHz晶体振荡器 工厂校准的内部16MHz RC和 38kHz的低功耗RC 时钟安全系统

低功耗RTC BCD日历,闹钟中断, 数字校准+ / - 0.5ppm的准确度 先进的防篡改检测 DMA 4个通道。 ADC,DAC的,SPIS,我 2C,USART接口,定时器,1路。存储器到存储器的 LCD:8x40或4x44瓦特/升压转换器 12位ADC1 Msps/28渠道 温度。传感器和内部参考。电压 记忆

Plaxis中常见问题集锦

1 问:Geo FEM, Plaxis, Z-Soil软件比较?2008/6/5 9:34:48 答:三者针对某个算例计算结果相差不大,误差在可接受范围之内。 就易用性来说,Plaxis好于Z-Soil好于GEO。Plaxis大家都用得很多了,Z-Soil的建模可以在前处理模块中用CAD元素绘制,或者通过dxf文件导入;GEO4只能输入剖面线的坐标,比较烦琐。Plaxis和Z-soil基本可以解决岩土工程所有问题,但GEO4由于建模功能的限制,只能解决隧道、边坡等相关问题;Plaxis和Z-Soil可以进行渗流分析(非饱和)包括流固偶合分析。 总的来说,Plaxis和Z-Soil是专业的岩土工程有限元程序;GEO FEM是GEO4里面的一个工具包,而GEO4类似于国内的理正一样,是遵循Eurocode的设计软件。 2 问:在plaxis中,用折减系数作出它的几个滑裂面,如何查看滑裂面的角度、圆心、半径等 这些滑裂面的相关参数呢? 2008/6/5 9:36:26 答:使用强度折减法,不用假定slip surface,故不会有这些数据。 3 问:Plaxis怎么模拟路堤分步填筑?在实际施工中,填筑不是一次加载的,可能先填一半, 过个月再填一半,而且这一半也不是一次填完,要在几天内完成,请问怎么在Plaxis中模拟,怎 么设置可以反应填筑速率,请高手指教? 2008/6/5 9:47:25 答:手册里有相关例子,你可以参考一下lesson 5。 堆载速率可以通过设置堆载这个stage的时间间隔来设置。如果只有基本模块,可以设置mstage 的数值。mstage=1.0,说明100%施加上去了,mstage=0.1,说明只有10%的荷载。由于Plaxis 不能设置load function,比较麻烦。当然,你可以将一层土细分成几个stage完成,也可以实 现。 4 问:Plaxis 3D 用这个软件分析基坑时,基坑是钢格栅喷混凝土支护,支护用板来模拟,E I和EA中的I和A分别指哪个面的惯性矩和面积,以及单位后面的/m应该是哪个长度? 2008/6/5 9:49:13 答:应该是: A=沿着洞轴方向L×厚度d E是弹性模量 I是惯性矩 5 问:在网上看到有人怀疑Plaxis 3D Foundation和3D Tunnel的真三维性,有人说它们不是 真正的三维计算,有谁知道是怎么回事吗? 2008/6/5 9:59:42 答:Plaxis 3D Tunnel计算内核是三维的。但是目前只支持平面拉伸建模,建附加模型还存在困 难。3D Tunnel的确不能生成复杂的斜交隧道。 3D Foundation是专门解决基础问题的三维有限元计算软件。其解决基础问题要比FLAC3D要专 业,特别是考虑了一些工程实际,但开放性不如FLAC3d。近期3D Foundation将在此方面有重大 改进,新版本前处理借用GID作为前处理工具。Plaxis 系列优点长处是其理论,尤其是hs和 hs-small模型。 6 问:最近在算一个基坑,很好的地质条件,桩、撑刚度都取得很大,居然算出来水平位移始终 都有70mm左右,但用同济启明星算水土分算,并且参数都没有取最大值,算的结果只有17mm左 右。深圳规范要求水平位移不超过30mm,要是用Plaxis是很难算出小于规范值的结果的,事实 上,也不至于有那么大的位移的? 2008/6/5 10:05:32 答:主要问题是现在很多地质报告都不提供三轴的试验参数:例如E50模量,Eur模量,Es模量, 有效强度指标等;土体的本构参数比较特殊,要做特殊的试验,因此一般的项目参数方面的确有 问题。不过,即便是只有Es模量和直剪固快指标,通过换算和引入K0、孔隙比、Cc,Cs等其他 参数,也是可以得到其他需要的参数,不过这需要比较扎实的本构模型方面的知识和岩土工程经 验,知道不同的本构适合模拟什么土层,知道本构的优点和局限性,这对使用者的要求的确比较 高。 7 问:隧道已经组成一个类组,所以一定要对其进行材料定义。如果不定义得话,就不能对其 进行网格划分,这要怎么解决呢? 2008/6/5 10:08:42 答:你是不是只想模拟基坑开挖对既有隧道结构的影响,而省略掉前面隧道开挖过程的模拟。 这样的话,结果恐怕很难正确,而且会碰到你所说的问题。因为隧道在基坑开挖前,有一定的受 力状况,这需要模拟隧道开挖过程才能得到其受力状况,基坑开挖的影响也是在其这个受力状况

STM8L051低功耗模式实现说明文档

STM8L051低功耗模式测试文档 STM8L051的五种低功耗模式wait ,low power run mode,low power wait mode,Ative-Halt mode,Halt mode。 1、WAIT mode 在等待模式,CPU的时钟是停止的,被选择的外设继续运行。W AIT mode 分为两种方式:WFE,WFI。WFE是等待事件发生,才从等待模式中唤醒。WFI是等待中断发生,才从等待模式中唤醒。 2、low power run mode 在低功耗运行模式下,CPU和被选择的外设在工作,程序执行在LSI或者LSE下,从RAM 中执行程序,Flash和EEPROM都要停止运行。电压被配置成Ultra Low Power模式。进入此模式可以通过软件配置,退出此模式可以软件配置或者是复位。 3、low power wait mode 这种模式进入是在low power run mode下,执行wfe。在此模式下CPU时钟会被停止,其他的外设运行情况和low power run mode类似。在此模式下可以被内部或外部事件、中断和复位唤醒。当被事件唤醒后,系统恢复到low power run mode。 4、Active-Halt mode 在此模式下,除了RTC外,CPU和其他外设的时钟被停止。系统唤醒是通过RTC中断、外部中断或是复位。 5、Halt mode 在此模式下,CPU和外设的时钟都被停止。系统唤醒是通过外部中断或复位。关闭内部的参考电压可以进一步降低功耗。通过配置ULP位和FWU位,也可以6us的快速唤醒,不用等待内部的参考电压启动。 一、各个低功耗模式的代码实现 1、WAIT mode 等待模式分为两种:WFI和WFE。 1.1 WFI mode 当执行“wfi”语句时,系统就进入WFI模式,当中断发生时,CPU被从WFI模式唤醒,执行中断服务程序和继续向下执行程序。 通过置位CFG_GCR的AL位,使主程序服务完中断服务程序后,重新返回到WFI 模式。 程序如下: void Mcuwfi() { PWR_UltraLowPowerCmd(ENABLE); //开启电源的低功耗模式 CLK_HSEConfig(CLK_HSE_OFF); //关闭HSE时钟(16MHz) #ifdef USE_LSE CLK_SYSCLKSourceConfig(CLK_SYSCLKSource_LSE);

材料模型手册

材料模型手册

目录 1 简介 (5) 1.1 不同模型的选用 (5) 1.2 局限性 (7) 2 材料模拟初步 (9) 2.1 应力的一般定义 (9) 2.2 应变的一般定义 (11) 2.3 弹性应变 (12) 2.4 用有效参数进行的不排水分析 (14) 2.5 用有效强度参数进行不排水有效应力分析 (18) 2.6 用不排水强度参数进行不排水有效应力分析(不排水B) (19) 2.7 用不排水参数进行不排水总应力分析 (19) 2.8 高级模型中的初始预固结应力 (20) 2.9 关于初始应力 (21) 4 霍克布朗模型(岩石行为) (32) 4.1 霍克布朗模型公式 (33) 4.2 霍克-布朗与莫尔-库伦之间的转换 (36) 4.3 霍克-布朗模型中的参数 (36) 5 土体硬化模型(各向同性) (41) 5.1 标准排水三轴试验的双曲线关系 (42) 5.2 土体硬化模型的双曲线近似 (43) 5.3 三轴应力状态下的塑性体积应变 (45) 5.4 土体硬化模型的参数 (46) 5.5 土体硬化模型中帽盖屈服面 (52) 6 小应变土体硬化模型(HSS) (54) 6.1 用双曲线准则描述小应变刚度 (55) 6. 2 HS 模型中使用HARDIN-DRNEVICH 关系 (56) 6.3 初始加载VS 卸载/重加载 (58) 6.4模型参数 (59) 6.5 参数0G 和0.7γ (61) 6.6 模型初始化 (62) 6.7 与土体硬化模型的其他区别 (63) 7 软土模型 (64) 7.1 应力和应变的各向同性状态(123'''σσσ==) (64)

材料模型手册笔记

8 材料模型手册笔记 1 、概述 1.1 不同模型的选用 Mohr-Coulomb 模型(MC),弹塑性Mohr-Coulomb 模型包括五个输入参数,即:表示土体弹性的E 和ν,表示土体塑性的?和c,以及剪胀角ψ。通过选择适当的K0值,可以生成初始水平土应力。 节理岩石模型(JR),节理模型是一种各向异性的弹塑性模型,特别适用于模拟包括层理尤其是断层方向在内的岩层行为等。 Hardening-Soil 模型(HS),是一种改进了的模拟岩土行为的模型,适用于所有的土,但是它不能用来解释粘性效应,即蠕变和应力松弛。对比Mohr-Coulomb 模型,Hardening-Soil 模型还可以用来解决模量依赖于应力的情况。这意味着所有的刚度随着压力的增加而增加。因此,输入的三个刚度值(三轴加载刚度E50、三轴卸载刚度Eur 和固结仪加载刚度E oed)与一个参考应力有关,这个参考应力值通常取为100kPa (1 bar)。 软土蠕变模型(SSC),是一个新近开发的应用于地基和路基等的沉陷问题的模型。 软土模型(SS),适用于接近正常固结的粘性土的主压缩。 改进的Cam-Clay 模型(MCC),主要用于模拟接近正常固结的粘性土。 不同模型的分析 对考虑的问题进行一个简单迅速的初步分析使用Mohr-Coulomb 模型。软土蠕变模型可以用于分析蠕变(即:极软土的次压缩)。 1.2 局限性 HS 模型:不能用来说明由于岩土剪胀和崩解效应带来的软化性质,不能用来模拟滞后或者反复循环加载情形,常需要较长的计算时间。 SSC 模型,通常会过高地预计弹性岩土的行为范围。特别是在包括隧道修建在内的开挖问题上。 SS 模型,同样的局限性(包括HS 模型和SSC 模型的)存在于SS 模型中。在开挖问题上不推荐使用这种模型。

Hardening soil模型简介(Plaxis)

Chapter8 The hardening soil model 8.1Reasons for the election of the model 8.1.1Introduction The numerical modeling is going to be carried out by means of the?nite-element method as it allows for modeling complicated nonlinear soil behavior and various interface conditions, with di?erent geometries and soil properties. PLAXIS program will be used,this program has a series of advantages:?Excess pore pressure:Ability to deal with excess pore-pressure phenomena.Ex-cess pore pressures are computed during plastic calculations in undrained soil.?Soil-pile interaction:Interfaces can be used to simulate intensely shearing zone in contact with the pile,with values of friction angle and adhesion di?erent to the friction angle and cohesion of the soil.Better insight into soil-structure interaction.?Automatic load stepping:The program can run in an automatic step-size and an automatic time step selection mode,providing this way robust results.?Dynamic analysis:Possibility to analyze vibrations and wave propagations in the soil. ?Soil model:It can reproduce advanced constitutive soil models for simulation of non-linear behavior. 8.1.2Model election:soil,pile and interface The available soil models are(PLAXIS Version8): 1Linear elastic model:it is the simplest available stress-strain relationship.Ac-cording to the Hooke law,it only provides two input parameters,i.e.Young’s modu-lus E and Poisson’s ratioν.It is NOT suitable here because soil under load behaves strongly inelastically.However,this will be used to model the pile 2Mohr-Coulomb model:it is a perfectly elastoplastic model of general scope,thus, has a?xed yield surface.It involves?ve input parameters,i.e.E andνfor soil elas-ticity,the friction angle?and the cohesion c for soil plasticity,and the angle of dilatancyψ.It is a good?rst-order model,reliable to provide us with a trustful?rst insight into the problem. Advantages:

Plaxis中常见问题集锦讲解

2008/6/5 Z-Soil软件比较?Plaxis,1 问:Geo FEM,9:34:48 答:三者针对某个算例计算结果相差不大,误差在可接受范围之内。的建模可以在前Z-SoilGEO。Plaxis大家都用得很多了,就易用性来说,Plaxis好于Z-Soil好于比较烦琐。只能输入剖面线的坐标,或者通过dxf文件导入;GEO4处理模块中用CAD元素绘制,只能解决隧道、基本可以解决岩土工程所有问题,但GEO4由于建模功能的限制,Plaxis 和Z-soil 可以进行渗流分析(非饱和)包括流固偶合分析。Plaxis和Z-Soil边坡等相关问题;里面的一个工具GEO4是专业的岩土工程有限元程序;GEO FEM是总的来说,Plaxis和Z-Soil类似于国内的理正一样,是遵循Eurocode 的设计软件。包,而GEO4问:在plaxis中,用折减系数作出它的几个滑裂面,如何查看滑裂面的角度、圆心、半径等2008/6/5 2 这些滑裂面的相关参数呢?9:36:26 slip surface,故不会有这些数据。答:使用强度折减法,不用假定问:Plaxis怎么模拟路堤分步填筑?在实际施工中,填筑不是一次加载的,可能先填一半,2008/6/5 过个月再填一半,而且这一半也不是一次填完,要在几天内完成,请问怎么在3 Plaxis中模拟,怎9:47:25 么设置可以反应填筑速率,请高手指教? 答:手册里有相关例子,你可以参考一下lesson 5。 堆载速率可以通过设置堆载这个stage的时间间隔来设置。如果只有基本模块,可以设置mstage的数值。mstage=1.0,说明100%施加上去了,mstage=0.1,说明只有10%的荷载。由于Plaxis不能设置load function,比较麻烦。当然,你可以将一层土细分成几个stage完成,也可以实现。 问:Plaxis 3D 用这个软件分析基坑时,基坑是钢格栅喷混凝土支护,支护用板来模拟,EI2008/6/5 4 和EA中的I和A分别指哪个面的惯性矩和面积,以及单位后面的/m应该是哪个长度?9:49:13 是弹性模量I是惯性矩答:应该是:A=沿着洞轴方向L×厚度d E问:在网上看到有人怀疑Plaxis 3D Foundation 和3D Tunnel的真三维性,有人说它们不是2008/6/5 5 真正的三维计算,有谁知道是怎么回事吗?9:59:42 答:Plaxis 3D Tunnel计算内核是三维的。但是目前只支持平面拉伸建模,建附加模型还存在困难。3D Tunnel的确不能生成复杂的斜交隧道。 3D Foundation是专门解决基础问题的三维有限元计算软件。其解决基础问题要比FLAC3D要专将在此方面有重3D FoundationFLAC3d。近期业,特别是考虑了一些工程实际,但开放性不如和hs 尤其是大改进,新版本前处理借用GID 作为前处理工具。Plaxis 系列优点长处是其理论,hs-small模型。问:最近在算一个基坑,很好的地质条件,桩、撑刚度都取得很大,居然算出来水平位移始终都有70mm左右,但用同济启明星算水土分算,并且参数都没有取最大值,算的结果只有17mm2008/6/5 6 左右。深圳规范要求水平位移不超过30mm,要是用Plaxis是很难算出小于规范值的结果的,事10:05:32 实上,也不至于有那么大的位移的? 答:主要问题是现在很多地质报告都不提供三轴的试验参数:例如E50模量,Eur模量,Es模量,有效强度指标等;土体的本构参数比较特殊,要做特殊的试验,因此一般的项目参数方面的确有问题。不过,即便是只有Es模量和直剪固快指标,通过换算和引入K0、孔隙比、Cc,Cs等其他参数,也是可以得到其他需要的参数,不过这需要比较扎实的本构模型方面的知识和岩土工程经验,知道不同的本构适合模拟什么土层,知道本构的优点和局限性,这对使用者的要求的确比较高。问:隧道已经组成一个类组,所以一定要对其进行材料定义。如果不定义得话,就不能对其2008/6/5 7 进行网格划分,这要怎么解决呢?10:08:42 答:你是不是只想模拟基坑开挖对既有隧道结构的影响,而省略掉前面隧道开挖过程的模拟。这样的话,结果恐怕很难正确,而且会碰到你所说的问题。因为隧道在基坑开挖前,有一定的受力状况,这需要模拟隧道开挖过程才能得到其受力状况,基坑开挖的影响也是在其这个受力状况上产生的。你现在的目的是让基坑开挖前,隧道结构的内力和弯矩

相关文档