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框架: 本地: 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./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./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- log4j.properties里面拷贝 解决了运行中显示红色的log信息的问题 |
|