spring入门

Struts1hibernate不能提高效率

多个session可以使用同一个事物

Struts1其实不能提高效率,自始自终都是单例,虽然保证了安全,但是没有效率。

Spring的引入使代码清晰,提高了效率

1.Spring可以自动生成session和事务

2.Hibernatestruts集成必须要有拦截器,而spring可以自动提供编码过滤器和懒加载过滤器。

 

 

Spring是以一种业务层框架:

1.会自动生成业务对象

 

 

功能

1.IOC容器

  利用Spring来创建对象并完成关系组装,比如能自动生成单例对象。

 

自动生成对象

完成对象之间的关联

根据需求决定生成单例还是多例

 

2.AOP面向切面编程的技术,采用动态代理技术,比如增删改查,代码已经写好了,但有新的需求,要加权限验证和加日志,按照传统的方式,要修改源代码,但这样代价太大了,风险很大,如可能会引入新的错误。如果按照AOP,在不知道源码的情况下,可以增加功能。

 比如过滤器Filter,和利用spring进行事务处理

 如今开发需求,也是用AOP的思想去考虑

  对原有的方法的基础上,为其增加新的功能,这种方式也叫做横切性问题。

3.代替其他框架完成新的功能

 

比如替struts1生成多例的Action

hibernate生成全局性的事务,真正的做到了安全性和并发性的统一

替很多的框架生成很多自动的功能:比如懒加载和编码过滤器。

springmvcspring家族的一部分,可以自动集成

作用:

1.生成session工厂:表示层struts1作为表示层,因为Action就是单例的。然而spring生成Action虽然表面上市单例的,但实质上是多例的。

2.对持久层:可以生成全局性的事务,session对每个事务共享,把安全级别降低到session上,假如有100session,而且并发,事务一提交,但只有一个session去临时集合中生成缓存。

3.替很多的框架生成很多自动的功能:比如懒加载和编码过滤器。

 

 

DAOORMAOPJEEWEBCORE

 

传统装配:

    1.通过set方法去装配

2.通过构造函数的参数签名去装配(提供一个持久层接口的变量)

 

   这种方式,业务对象依赖于持久对象,一旦用户需求改变,源代码必须要修改。

   手工装配量太大。

 

   

 

问题抛出?之前我们用工厂的方式隔离开业务层和持久层,降低了耦合性。而且我们装配的时候,如果有多个对象需要装配,这样工作量太大了。假如我们用原生的工厂装配,需要写大量的代码。

     这时候,我们便可以使用spring的依赖注入。。。

 

 

依赖注入:

     1.spring提供了工厂,我们只需从工厂中拿到相应的对象即可

     2.不用修改源码,直接修改配置即可

 

<bean id=”mysqlDao” class=””>//id,相当于map中的key class相当于value

//工厂在读配置文件的时候,会根据id,和value,把id放入在map中,把通过反射生成的对象放入到value中。

 

<bean id=”userManager” class=””>

   对构造方法注入

  <constructor-arg ref=”userDao4Mysql”>//给构造方法注入,

   使用属性的setting方法进行注入

  <property name=”userDao” ref=”mysql4Dao”/>// property是一个属性,有属性名,ref是把一个bean注入到该bean

   //给该bean属性注入,就是通过ref的值从map中拿到以该值对应的对象,并通过set方法给该属性设值。调用的是Set方法,如果没有该方法就会出错

</bean>

 

 

创建bean工厂:

BeanFactory factory=new ClassPathXmlApplicationContext();

UserManager userManager=(UserManager)factory.getBean(“userManager”);//拿到的是一个接口的实现类

userManager.save();

 

好处:没有创建对象的过程,都是工厂自动生成相应的对象,实现了依赖注入。

 

spring最大的优点:自动创建对象,并且完成对象之间关系的装配

 

<customEditConfigurer class=””>

这是一个map,里面放置的是转换器,key对应的类型,value是转换器对象。

1.首先创建的是,

2.

 

 

装配:

  如果属性的类型是整形,则在工厂中配置的是字符串类型

  <property name=”intValue” value=”123”/>

 

 

   就会从bean工厂中找到对象,拿到map,根据key找到属性编辑器,最后进行转化。

 

 

如果装配的是list类型

 1.会创建一个ArrayList类型的对象

 2.会把list里面的value数据通过add把对象的地址加入到list(基本类型转化为包装类)

      <list>

          <value>list1</value>

          <value>list2</value>

      </list>

如果装配的是set类型的数据

      <set>

          <ref bean=””></ref>

      </set>

 

如果装配的是数组类型

<list>

   <value>array1</value>//会把list类型转化为String类型

</list>

 

如果装配的是map类型

<map>

   <entry key=”k1” value=”v1”/>

   <entry key=”k2” value=”v2”/>

   <entry key=”k3” ref=”bean3”/>

</map>

 

 

 <!--定义属性编辑器    -->     

就算不配属性编辑器,工厂一创建,就会自动把属性转化器注册进工厂中

<bean

      id="customEditorConfigurer" class="org.springframework.beans.factory.config.CustomEditorConfigurer">

<property name="customEditors">

<map>

<entry key="java.util.Date" 或者 ref=utilDataFormat>

                    <!-- 将日期类型的转化器注册进map-->

<bean class="com.bjsxt.spring.UtilDatePropertyEditor">

<property name="format" value="yyyy:MM:dd"/>

</bean>

</entry>

</map>

</property>

</bean>

 

 <!-- 将日期类型的转化器注册进map-->

<bean

 id=utilDataFormat  class="com.bjsxt.spring.UtilDatePropertyEditor">

<property name="format" value="yyyy:MM:dd"/>

</bean>

 

 

   

 

/*

   继承一个PropertyEditsupport,并覆写setASText方法

*/

import java.beans.PropertyEditorSupport;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

 

/**

 * java.util.Date属性编辑器

 * @author Administrator

 *

 */

public class UtilDatePropertyEditor extends PropertyEditorSupport {

/*

 *

 *

*/

 

private String format ;

@Override

public void setAsText(String text) throws IllegalArgumentException {//一定要覆写setAsText方法,传入的text一定是个字符串类型

System.out.println("UtilDatePropertyEditor.saveAsText() -- text=" + text);

SimpleDateFormat sdf = new SimpleDateFormat(format);

try {

Date d = sdf.parse(text);

this.setValue(d);

} catch (ParseException e) {

e.printStackTrace();

}

}

 

public void setFormat(String format) {

this.format = format;

}

 

}

 

 

 

<property name="dateValue">

  <value>2015:09:11</value>

 </property>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值