Spring(一)

 

来自:http://blog.csdn.net/yuchen2008/archive/ 2007/05/25 /1625787.aspx

Spring(一)

基本概念:

1.什么是spring?有什么用?

2.Spring和其他类似产品的区别?

3.Spring的特点(优缺点)?

4.Spring的内容?

 

什么是spring?有什么用?

Spring就是轻量级的业务层框架,什么是轻量级:第一,spring的文件大小只有1mb,第二,资源消耗,占用内存与其他的产品相比较小(:EJB)

作用:完成业务层的开发

 

Spring和其他类似产品的区别?

轻量级,EJB也是完成业务层的开发,但是他是重量级的框架,EJB的重点在企业应用,那么有些程序没有必要使用重量级的工具来开发轻量级的应用,这样成本过大,spring就是满足完成轻量级应用的业务层框架

 

Spring的特点(优缺点)?

优点:

1.依赖注入(控制反转):什么是依赖注入?在一个对象需要使用另一个对象的时候,只声明另一个对象的接口,它的实例在运行时获得它,作用:就是解决了组件中的耦合,也就是不依赖于固定的对象

2.面向方面编程:什么是面向方面编程?AOP:在预编译或运行时为程序加入新的功能(:加入安全,同步,事务等),编程方式采用的是注释,不用在业务代码中写这些与业务无关的代码了,作用:实现业务与其他代码分离,解耦合,他完善依赖注入(DI)

3.简化javaee编程结构:web的支持(MVC),DAO的支持,ORM的支持

4.类似一站式服务:web,业务的功能都有,用户也可以选择性的使用

 

Spring的内容?

1.核心模块:BeanFactory(用来管理bean组件的,相当于bean的容器,通过读beanxml文件,可以从中知道beanbean的依赖关系和bean的实现)

2.AOP:面向方面编程(声明式中间件服务管理)

3.ORM

4.DAO

5.Web

6.Context:ApplicationContext:作用:增强功能,:程序国际化等

 

第一个Spring:

1.下载spring框架

2.解读spring框架的目录结构

3.实例1(不使用工具)

4.实例2(eclipse)

5.杂项问题

 

下载spring框架:

http://www.springframework.org

本地: E:/个人数据库/基本结构/专业/spring/参考资料/Spring-framework.zip

 

解读spring框架的目录结构:

解压下载的spring框架:

/dist:核心包,spring.jar(工厂文件集合),还有spring.jar的子包,spring-beans.dtd:定义beans.xml的属性和beans.xml的头部

/docs:spring api文档

/lib:spring的编译和运行所依赖的第三方类库

 

实例1(不使用工具):

程序目标:开发一个spring,功能是显示hello 方法参数 my name is bean属性value

1.设置classpath:添加spring.jar and /lib/jakarta-commons/commons-logging.jar

2.创建一个应用目录:yuchen

3.创建src目录

4.开发一个接口和一个类

5.写配置文件beans.xml:定义这个类,文件的头部可以去spring-beans.dtd中找到

6.写客户端测试类

7.编译运行

 

接口:

package first;

 

public interface Hello{

     public String sayhello(String user);

     }

 

Bean:

package first;

 

public class HelloImp implements Hello{

     private String name;

     public String sayhello(String user){

          return "hello, "+user+"my name is: "+this.name;

          }

     public void setName(String name){

          this.name=name;

          }

     }

 

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="hello" class="first.HelloImp">

          <property name="name">

                <value>spring</value>

          </property>

     </bean>

</beans>

 

Test:

import org.springframework.core.io.ClassPathResource;

import org.springframework.beans.factory.xml.XmlBeanFactory;

import first.*;

 

public class TestHello{

    

     public static void main(String [] args){

                //1.读取配置文件,beans.xml:注意beans.xml的写法:如果放到根目录下,那么直接写beans.xml,如果放到子目录下,子目录名/beans.xml

                //2.实例化bean工厂对象,载入xml资源:工厂负责管理bean组件的目前是管理当前xml资源中的bean

                //3.通过bean工厂对象得到你要找的bean实例

                ClassPathResource resource=new ClassPathResource("beans.xml");

                XmlBeanFactory factory=new XmlBeanFactory(resource);

                Hello hello=(Hello)factory.getBean("hello");

                String rst=hello.sayhello("yuchen");

                System.out.println(rst);

          }

     }

 

D:/yuchen> Javac –d d:/yuchen d:/yuchen/src/*.java

D:/yuchen> Javac –d d:/yuchen d:/yuchen/*.java

D:/yuchen> java TestHello

 

实例2(eclipse):

程序目标:测试spring的特性:依赖注入/控制反转,调用A类的业务方法,这个方法需要B类方法提供的数据,A类中,没有B实例,只有B的接口类型,只依赖它的接口,在运行时获得B的实例,从而得到其数据

1.新建java工程

2.配置jar:两个包

3.开发两个接口,两个类

4.beans.xml

5.测试类测试

Model接口:

package yuchen.beanfactory;

 

public interface Model {

     public String supportData();

}

 

View接口:

package yuchen.beanfactory;

 

public interface View {

     public void render();

}

 

Model bean:

package yuchen.beanfactory;

 

public class AcountModel implements Model {

 

     private String ownerName;

     private double balance;

     public String supportData() {

          // TODO Auto-generated method stub

          return "Acdount : /n"+"ownerName :"+this.ownerName+

          "/n balance :"+this.balance;

     }

     public void setBalance(double balance) {

          this.balance = balance;

     }

     public void setOwnerName(String ownerName) {

          this.ownerName = ownerName;

     }

    

}

 

View bean:

package yuchen.beanfactory;

 

public class CommandLineView implements View {

 

     private Model model;

     public void render() {

          // TODO Auto-generated method stub

          String rst=model.supportData();

          System.out.println(rst);

     }

     public void setModel(Model model) {

          this.model = model;

     }

    

}

 

beans.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="model" class="yuchen.beanfactory.AcountModel">

          <property name="ownerName">

                <value>tarena</value>

          </property>

          <property name="balance">

                <value>1000.56</value>

          </property>

     </bean>

    

     <bean id="view" class="yuchen.beanfactory.CommandLineView">

          <property name="model">

                <ref bean="model"></ref>

          </property>

     </bean>

</beans>

 

test:

package yuchen.beanfactory;

 

import org.springframework.beans.factory.xml.XmlBeanFactory;

import org.springframework.core.io.ClassPathResource;

 

public class Test {

 

     /**

      * @param args

      */

     public static void main(String[] args) {

          // TODO Auto-generated method stub

          ClassPathResource resource=new ClassPathResource("yuchen/beanfactory/beans.xml");

          XmlBeanFactory factory=new XmlBeanFactory(resource);

          View view=(View) factory.getBean("view");

          view.render();

     }

 

}

 

杂项问题:

1.eclipse中引入xml dtd文件

Windows->preferences->web and xml -> xml catalog

Add:uri:要导入的dtd地址 :spring-beans.dtd

Key type:public id

Key:例如:-//spring//dtd//en

 

2.导入log4j

导入:spring/lib/log4j.jar

在根目录下创建log4j.properties文件,内容从H:/spring-framework- 1.2.8 /test/log4j.properties里面拷贝

解决了运行中显示红色的log信息的问题

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值