JAVA问题

1.JSP的内置对象:

  request对象
  response对象

     ▪ session对象

对象是一个JSP内置对象,它在第一个JSP页面被装载时自动创建,完成会话期管理。从一个客户打开浏览器并连接到服务器开始,到客户关闭浏览器离开这个服务器结束,被称为一个会话。当一个客户访问一个服务器时,可能会在这个服务器的几个页面之间切换,服务器应当通过某种办法知道这是一个客户,就需要Session对象。

  out对象
  page对象
  application对象
  exception对象
  pageContext对象

     ▪ config对象

2.Spring

spring主要内容是:IOC AOP 事务管理 远程调用 最主要的是前面三个。
 spring设计的初衷就是为了方便开发设计,他得另一个有点就是对系统是非侵入式起作用。
3.Spring的事务管理

事务:全有全无的操作(玩跷跷板的例子,全上能玩,不上不能玩),事务允许将几个操作组合成一个要么全部发生要么全部不发生的工作单元。一切顺利,成功,一个失败,失败。现实生活中的实例是转账。

事务的特性ACDI,原子性(Atomic),工作单元,全发生或全不发生

一致性(Consistent),事务完成,无论成果失败,保证建模的业务一致的状态 (转账)

隔离性(Isolated),多个用户对相同数据操纵,隔离避免操作不会纠缠(往往涉及到数据库锁定行/列)

持久性(Durable),一旦事务完成,结果应该是持久化的,这样就可以从任何的系统奔溃中恢复。


Spring提供对编码式和声明式事务管理的支持。

编码式,用回调机制将实际的事务实现,从事务性的代码中抽象出来。代码量大。

声明式,基于(AOP)有助于用户将操作与事务规则解耦。灵活方便。

Spring并不直接管理事务,而是提供多种事务管理器

http://wenku.baidu.com/link?url=VIcmAr9EQ_Lux84R5n25O53ZylkFCpqDYRzEAv9su3aief67XoRsF0kctJ7G8-ZvP8Gx2thF3BhVWpzwY2emPEiwB7wqulaYxqCdclSnVtG

编程式事务处理:

Spring提供了几个关于事务处理的类:TransactionDefinition //事务属性定义   
  TranscationStatus //代表了当前的事务,可以提交,回滚。   
  PlatformTransactionManager这个是spring提供的用于管理事务的基础接口,其下有一个实现的抽象类 AbstractPlatformTransactionManager,我们使用的事务管理类例如 DataSourceTransactionManager等都是这个类的子类。   
  我们使用编程式的事务管理流程可能如下:

(1) 声明数据源。   

 (2) 声明一个事务管理类,例如:DataSourceTransactionManager,HibernateTransactionManger,JTATransactionManager等

 (3) 在我们的代码中加入事务处理代码:   
TransactionDefinition td = new TransactionDefinition();  
TransactionStatus ts = transactionManager.getTransaction(td);  try{  
 //do sth  
 transactionManager.commit(ts);  
}catch(Exception e){transactionManager.rollback(ts);}   
  使用Spring提供的事务模板TransactionTemplate:   
void add()  {  
 transactionTemplate.execute( new TransactionCallback(){    pulic Object doInTransaction(TransactionStatus ts)    { //do sth}   }  }   
  TransactionTemplate也是为我们省去了部分事务提交、回滚代码;定义事务模板时,需注入事务管理对象。   

声明式事务处理:

Spring声明式事务处理也主要使用了IoC,AOP思想,提供了TransactionInterceptor拦截器和常用的代理类TransactionProxyFactoryBean,可以直接对组件进行事务代理。 

使用TransactionInterceptor拦截器的步骤:

①定义数据源,事务管理类

②定义事务拦截器

③为组件声明一个声明一个代理类ProxyFactoryBean

4.侵入式设计和非侵入式设计的区别

非侵入式设计
一个客户端的代码可能包含框架功能和客户端自己的功能。
侵入式设计

就是设计者将框架功能“推”给客户端,而非侵入式设计,则是设计者将客户端的功能“拿”到框架中用。

侵入式设计有时候表现为客户端需要继承框架中的类,而非侵入式设计则表现为客户端实现框架提供的接口

侵入式设计带来的最大缺陷是,当你决定重构你的代码时,发现之前写过的代码只能扔掉。而非侵入式设计则不然,之前写过的代码仍有价值。

5.Spring注解

Spring的特色是IoC容器,管理很多Bean,要求这些Bean都配置在applicationContext.xml文件中。
用了注解之后,就不需要在xml文件中配置了,Spring提供了几个辅助类会自动扫描和装配这些Bean。
所以,使用注解能大大减少xml文件的体积。

注解减少了XML的配置

@AutoWired自动装配

@Resource @Resource 的作用相当于 @Autowired,只不过 @Autowired 按 byType 自动注入,面@Resource 默认按 byName 自动注入罢了。

@Service 通常作用在业务层,

@Constroller 通常作用在控制层,

@Repository注解便属于最先引入的一批,它用于将数据访问层 (DAO 层 ) 的类标识为 Spring Bean。

6.实例化一个对象的方法

public static void main(String[] args){
       AccpTeacher accpTeacher = new AccpTeacher();
       System.out.println(accpTeacher);
}
       可以清晰的想到运行结果是: 名字是:无名氏
       以上是我们最常用的方式,但有时我们想通过字符串来实例化一个类如何做呢,看下面代码:
public static void main(String[] args){
       // 实例化一个类
       Object accpTeacher = Class.forName(AccpTeacher.class.getName()).newInstance();
       System.out.println(accpTeacher);
}
       运行结果同样是: 名字是:无名氏
       首先Class.forName(类名)是将这个类加载到JVM虚拟机中,获得一个类型为Class的类,然后调用其newInstance()方法,相当于实例化(调用无参的构造函数);所以以上两段代码的运行效果是一致的

public static void main(String[] args){
       AccpTeacher accpTeacher = new AccpTeacher();
       System.out.println(accpTeacher);
}
       可以清晰的想到运行结果是: 名字是:无名氏
       以上是我们最常用的方式,但有时我们想通过字符串来实例化一个类如何做呢,看下面代码:
public static void main(String[] args){
       // 实例化一个类
       Object accpTeacher = Class.forName(AccpTeacher.class.getName()).newInstance();
       System.out.println(accpTeacher);
}
       运行结果同样是: 名字是:无名氏
       首先Class.forName(类名)是将这个类加载到JVM虚拟机中,获得一个类型为Class的类,然后调用其newInstance()方法,相当于实例化(调用无参的构造函数);所以以上两段代码的运行效果是一致的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值