来自: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的容器,通过读bean的xml文件,可以从中知道bean与bean的依赖关系和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信息的问题