spring开发指南(夏昕)--Spring初探之我的第一个Spring实例
- 格式:docx
- 大小:145.61 KB
- 文档页数:9
Spring简介什么是Spring?spring是分层的avaSE以及javaEE应⽤于全栈的轻量级开源框架,以IOC(Inverse Of Control)控制反转,AOP(Aspect Oriented Programing)⾯向切⾯编程为核⼼,提供表现层SpringMVC以及持久层Spring,并且可整合多种其他开源框架。
spring的本质是管理对象,包括创建对象及维护对象之间的关系。
spring的优点1)⽅便解耦,简化开发通过spring的IOC可将对象的创建,以及对象之间的依赖都交由spring容器来进⾏管理,这样可以降低程序之间的耦合。
并且开发时也只需关注上层的应⽤,不⽤再多关注底层的应⽤。
2)AOP编程的⽀持spring⽀持AOP⾯向切⾯编程,许多OOP⾯向对象编程不能或很难实现的功能,都可通过AOP轻松实现。
3)声明式事务的⽀持可以将我们从单调烦闷的事务管理中解放出来,通过声明式事务的⽅式,可以灵活的进⾏事务管理,进⽽提⾼开发的质量和效率。
4)⽅便程序的测试可以⽤⾮容器依赖的编程⽅式进⾏⼏乎所有的测试⼯作,测试不再是昂贵的操作,⽽是随⼿可做的事情。
5)⽅便集成各种优秀的框架Spring可以降低各种框架的使⽤难度,提供了对各种优秀框架(Struts、Hibernate、Hessian、Quartz等)的直接⽀持。
6)降低javaEE的API的使⽤难度Spring对 JavaEE API(如 JDBC、JavaMail、远程调⽤等)进⾏了薄薄的封装层,使这些API 的使⽤难度⼤为降低。
7)spring框架的源码是经典学习的案例Spring的源代码设计精妙、结构清晰、匠⼼独⽤,处处体现着⼤师对Java设计模式灵活运⽤以及对 Java技术的⾼深造诣。
它的源代码⽆疑是Java技术的最佳实践的范例。
通过Spring进⾏解耦什么叫程序的耦合?在程序中,对象之间相互依赖,相互传递数据,这种相互关联的程度越⾼,程序的耦合度就越⾼。
spring入门教程Spring是一个开源的Java框架,用于构建企业级应用。
它提供了一种基于IoC(控制反转)和AOP(面向切面编程)的方式来管理对象和解决各种企业级应用开发中的常见问题。
在正式开始学习Spring之前,我们需要先了解一些基本概念和术语。
1. IoC(控制反转):IoC是Spring框架的核心概念之一,它通过将对象的创建和依赖关系的维护交给Spring容器来实现。
在传统的开发方式中,我们需要手动去创建对象并维护它们之间的关系,而在Spring中,我们只需要定义好对象的配置信息,Spring容器就会负责创建和管理对象。
2. AOP(面向切面编程):AOP是另一个重要的概念,它提供了一种在程序运行时动态地将代码切入到方法的过程中的方式。
通过AOP,我们可以将一些与核心业务逻辑无关的功能(如事务管理、日志记录等)从业务逻辑中分离出来,提高代码的重用性和可维护性。
3. Spring容器:Spring容器是一个用于管理和组织Spring应用中的对象的运行环境。
它负责创建、装配和管理对象,并提供了一些额外的功能,如依赖注入、AOP等。
Spring容器有两种主要的实现方式:BeanFactory和ApplicationContext。
BeanFactory是Spring最基本的容器,而ApplicationContext是BeanFactory的子接口,它提供了更丰富的功能,如国际化支持、事件发布等。
接下来,我们将一步步学习如何使用Spring构建一个简单的应用。
首先,我们需要将Spring框架的相关依赖添加到项目中,可以通过Maven或Gradle来管理依赖。
在项目的配置文件(如application.properties或application.yml)中,我们需要配置Spring的相关信息,如数据库连接、日志配置等。
然后,我们可以开始定义我们的业务逻辑了。
首先,我们需要定义一个POJO类(纯Java对象),它代表了我们的业务实体。
Spring2.5注释驱动8.4.1 Spring2.5注释驱动注释语法越来越多的被业界所使用,并且注释配置相对于 XML 配置具有很多的优势:它可以充分利用 Java 的反射机制获取类结构信息,这些信息可以有效减少配置的工作。
注释和 Java 代码位于一个文件中,而 XML 配置采用独立的配置文件,大多数配置信息在程序开发完成后都不会调整,如果配置信息和Java 代码放在一起,有助于增强程序的内聚性。
而采用独立的 XML 配置文件,程序员在编写一个功能时,往往需要在程序文件和配置文件中不停切换,这种思维上的不连贯会降低开发效率。
因此在很多情况下,注释配置比 XML 配置更受欢迎,注释配置有进一步流行的趋势。
Spring 2.5 的一大增强就是引入了很多注释类,现在您已经可以使用注释配置完成大部分 XML 配置的功能。
在使用注释配置之前,先来回顾一下传统上是如何配置 Bean 并完成 Bean 之间依赖关系的建立。
代码清单1 Foo.java Foo对象有一个String类型的name属性.package ;public class Foo {private String name;public String toStirng(){return"Foo Name is :" + ;}Set和get方法}代码清单2 Bar.java Bar对象有一个String类型的add属性.package ;public class Bar {private String add;public String toStirng(){return"Bar Add is :" + this.add;}Set和get方法}代码清单3 Main.java Main对象有两个属性分别是Foo和Bar package ;public class Main {private Foo foo;private Bar bar;public String toString(){return"Main : [" + +" "+ + "]";}Set和get方法}代码清单4 配置文件spring-config-beans.xml<bean id="main" class=""><property name="foo" ref="foo"></property><property name="bar" ref="bar"></property></bean><bean id="foo" class=""><property name="name" value="Foo"></property></bean><bean id="bar" class=""><property name="add" value="Bar"></property></bean>代码清单 5 Test.java Test类用于初始化Spring容器并获得main对象package ;import ;importClassPathXmlApplicationContext;public class Test {public static void main(String[] args) {String[] locations = {"spring-config-beans.xml"}; ApplicationContext ctx = new ClassPathXmlApplicationContext(locations);Main main = (Main) ctx.getBean("main");;}}运行Test类控制台输出以下信息:Main : [Foo Name is :Foo Bar Add is :Bar]这说明Spring已经完成了Bean的创建和装配工作。
spring⼊门案例(IDEA)1.创建maven项⽬2.在pom.xml中添加spring相关依赖<!-- Spring Context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.2.RELEASE</version></dependency><dependency><groupId>javax.annotation</groupId><artifactId>javax.annotation-api</artifactId><version>1.3.2</version></dependency>3.创建⼀个类public class Person{private String name; //私有字符串类型的变量//⽣成相关的set/get⽅法public String getName() {return name;}public void setName(String name) { = name;}//⽣成toString⽅法@Overridepublic String toString() {return "Stu{" +"name='" + name + '\'' +", age=" + age +'}';}}4.使⽤Spring框架的第⼀个步骤a.创建Spring框架的配置类暂时命名为Configpublic class Config {/*** @Bean 注解的⽅法:* 表⽰这个⽅法的返回值会注⼊到Spring容器中* 注⼊的对象,可以在该⽅法中创建并赋值* 这个⽅法的⽅法名默认情况下是这个对象的ID(名字)* @Rayn*/@Beanpublic Person person(){Person person=new Person();person.setName("JavaSpring");return person;}}b.创建测试类,让测试类通过Spring容器获取定义的对象personpublic class SpringTest {public static void main(String[] args) {//想启⽤Spring还需要依据我们编写的Spring配置类来创建对象AnnotationConfigApplicationContext ctx=new AnnotationConfigApplicationContext(Config.class);//实例化上⾯对象参数是配置类的反射//原因是反射中包含这个类中所有内容的信息,⽅便Spring处理//将对象从Spring容器中获取//现在⽤两个参数,第⼀个参数是获取对象的id//第⼆个参数是获取对象的类型Person who = ctx.getBean("person",Person.class);//输出这个对象System.out.println(who);ctx.close();}}c.成功输出 Person{name='JavaSpring'}。
Spring源码分析基本介绍摘要:本⽂结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码。
若有描述错误之处,欢迎指正。
前⾔作为⼀名开发⼈员,阅读源码是⼀个很好的学习⽅式。
本⽂将结合《Spring源码深度解析》来分析Spring 5.0.6版本的源代码,若有描述错误之处,欢迎指正。
Spring是2003年兴起的⼀个轻量级Java开源框架,旨在解决企业应⽤开发的复杂性。
Spring发展⾄今,衍⽣出⾮常丰富的模块,并应⽤在多种场景,⽐如:桌⾯应⽤,Web应⽤等。
Spring的模块化可以允许你只使⽤需要的模块,⽽不必全部引⼊。
⽬录⼀、整体架构1. 核⼼容器2. 数据访问/集成3. Web4. AOP5. Test⼆、设计理念三、使⽤场景1. 典型的Spring web应⽤程序2. Spring中间层使⽤第三⽅web框架3. 远程调⽤4. EJBs-包装现存POJOs⼀、整体架构Spring框架是⼀个分层架构,他包含⼀系列的功能要素,并被分为⼤约20个模块,如下图所⽰(很遗憾,并没有找到Spring5的架构图,下图是Spring4的,但结合Spring5的源码来看,该图还是能够体现Spring5的核⼼模块)这些模块被总结为以下⼏部分。
1. 核⼼容器Core Container(核⼼容器)包含有Core、Beans、Context和Expression Language模块。
Core和Beans模块是框架的基础部分,提供IoC(控制反转)和DI(依赖注⼊)特性。
这⾥的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。
Core模块主要包含Spring框架基本的核⼼⼯具类,Spring的其他组件都要使⽤到这个包⾥的类,Core模块是其他组件的基本核⼼。
当然你也可以在⾃⼰的应⽤系统中使⽤这些⼯具类。
<beans> Spring配置文件的根元素,包含一个或多个bean元素。
<bean> 用于告诉Spring容器一个类以及它是如何配置的。
class属性:Java Bean 类名(全路经)。
id属性:Java Bean在BeanFactory中的唯一标识,代码中通过BeanFactory获取JavaBean实例时需以此作为索引名称。
name属性:同上,如果给bean增加别名,可以通过name属性指定一个或多个id。
singleton属性:指定此Java Bean是否采用单例(Singleton)模式,如果设为“true”,则在BeanFactory作用范围内,只维护此Java Bean的一个实例,代码通过BeanFactory获得此Java Bean实例的引用。
反之,如果设为“false”,则通过BeanFactory获取此Java Bean实例时,BeanFactory每次都将创建一个新的实例返回。
abstract属性:设定ApplicationContext是否对bean进行预先的初始化。
parent属性:定义一个模板。
autowire属性:bean自动装配模式。
可选5种模式。
no:不使用自动装配。
Bean的引用必须通过ref元素定义。
byName:通过属性名字进行自动装配。
byType:如果BeanFactory中正好有一个同属性类型一样的bean,就自动装配这个属性。
如果有多于一个这样的bean,就抛出一个致命异常,它指出你可能不能对那个bean使用byType的自动装配。
如果没有匹配的bean,则什么都不会发生,属性不会被设置。
如果这是你不想要的情况(什么都不发生),通过设置dependency-check="objects"属性值来指定在这种情况下应该抛出错误。
constructor:这个同byType类似,不过是应用于构造函数的参数。
如果在BeanFactory中不是恰好有一个bean与构造函数参数相同类型,则一个致命的错误会产生。
Spring目录背景简介起源特点好处作用基本框架下载和安装应用实例主要产品Spring .NET研究源代码的步骤IOC和AOPIOC容器背景简介起源特点好处作用基本框架下载和安装应用实例主要产品Spring .NET研究源代码的步骤IOC和AOPIOC容器Rod Johnson在2002年编著的《Expert one to one J2EE design and development》一Spring Logo书中,对Java EE正统框架臃肿、低效、脱离现实的种种现状提出了质疑,并积极寻求探索革新之道。
以此书为指导思想,他编写了interface21框架,这是一个力图冲破Java EE传统开发的困境,从实际需求出发,着眼于轻便、灵巧,易于开发、测试和部署的轻量级开发框架。
Spring框架即以interface21框架为基础,经过重新设计,并不断丰富其内涵,于2004年3月24日,发布了1.0正式版。
同年他又推出了一部堪称经典的力作《Expert one-to-one J2EE Development without EJB》,该书在Java世界掀起了轩然大波,不断改变着Java开发者程序设计和开发的思考方式。
在该书中,作者根据自己多年丰富的实践经验,对EJB的各种笨重臃肿的结构进行了逐一的分析和否定,并分别以简洁实用的方式替换之。
至此一战功成,Rod Johnson成为一个改变Java世界的大师级人物。
传统J2EE应用的开发效率低,应用服务器厂商对各种技术的支持并没有真正统一,导致J2EE的应用没有真正实现Write Once及Run Anywhere的承诺。
Spring作为开源的中间件,独立于各种应用服务器,甚至无须应用服务器的支持,也能提供应用服务器的功能,如声明式事务等。
Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。
可以说Spring是企业应用开发的“一站式”选择,并贯穿表现层、业务层及持久层。
SpringBoot(一)使用MyEclipse创建SpringBoot项目下面是使用MyEclipse创建Spring Boot项目的步骤:1. 打开MyEclipse,并选择"File"->"New"->"Other",在弹出的对话框中找到"Spring",然后选择"Spring Starter Project"。
2. 在弹出的对话框中,填写项目的基本信息,包括项目的名称、所在的位置、使用的Spring Boot版本等。
可以根据具体需求进行配置,并且可以选择使用哪些技术栈,如Web、JPA等。
4. 在项目结构中,可以看到生成的默认目录结构,如src/main/java、src/main/resources、src/test/java等。
在这些目录下可以编写代码、存放资源文件和进行单元测试。
5. 在src/main/java目录下可以编写控制器、服务类等Java类文件。
在src/main/resources目录下可以存放配置文件、静态资源文件等。
在src/test/java目录下可以编写单元测试。
6. 可以通过右键单击项目,选择"Run As"->"Spring Boot App"来启动项目。
MyEclipse会自动检测并为项目配置合适的启动器,并且会将项目打包成可执行的JAR文件。
除了以上步骤,MyEclipse还提供了丰富的功能来帮助开发Spring Boot项目,如自动补全、代码自动格式化、调试工具等。
另外,MyEclipse也支持与其他的开发工具和技术的集成,如数据库、版本控制系统等。
总结来说,使用MyEclipse创建Spring Boot项目非常简单快捷。
它可以帮助开发者节省配置的时间和精力,提高开发效率,同时提供丰富的功能和工具来帮助开发人员快速搭建、开发和调试Spring Boot应用程序。
spring开发指南(夏昕)--Spring初探之我的第一个Spring实例 2010年06月30日 星期三 16:30 http://hi.baidu.com/sonmeika/blog/item/8f1b2ab3520d1caad9335ae4.html
spring开发指南(夏昕).pdf下载网址:http://download.csdn.net/source/2503323
SpringFramework下载地址:http://www.springsource.org/download,使用版本是:3.0.3 commons logging下载地址:http://commons.apache.org/logging/download_logging.cgi,使用版本是:1.1.1
下载上述文件并解压到各自目录中,在Eclipse中新建Java Project,名称为testSpringXiaxin,类库配置如下:
Spring采用Apache common_logging,并结合Apache log4j作为日志输出组件。为了在调试过程中能观察到Spring的日志输出,在CLASSPATH中新建log4j.properties配置文件,内容如下:
#log4j.rootLogger=ERROR, A1, A2 #log4j.rootLogger=WARN, A1, A2 log4j.rootLogger=INFO, A1, A2 #log4j.rootLogger=DEBUG, A1, A2 # A1 is set to be ConsoleAppender sending its output to System.out log4j.appender.A1=org.apache.log4j.ConsoleAppender log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %p ] %m%n
# Appender A2 writes to the file . #log4j.appender.A2 = org.apache.log4j.FileAppender #log4j.appender.A2 = org.apache.log4j.DailyRollingFileAppender log4j.appender.A2= org.apache.log4j.RollingFileAppender log4j.appender.A2.File= testSpringXiaxin.log log4j.appender.A2.File.MaxFileSize= 100MB log4j.appender.A2.File.MaxBackupIndex= 1 log4j.appender.A2.Append=true log4j.appender.A2.Threshold=INFO log4j.appender.A2.layout=org.apache.log4j.PatternLayout log4j.appender.A2.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [ %p ] %m%n
关于为何同时使用commons-logging和Log4j,请参阅文章:为什么同时使用commons-logging和Log4j
配置完成后,项目结构如下图所示:
log4j.properties存放在src目录中,bean.xml存放在项目的根目录中。 构建 Spring 基础代码: 1. Action接口: Action 接口定义了一个 execute 方法,在我们示例中,不同的 Action 实现提供了各自的execute方法,以完成目标逻辑。
package net.xiaxin.spring.qs; public interface Action { public String execute(String str); }
2. Action接口的两个实现UpperAction、LowerAction package net.xiaxin.spring.qs;
public class UpperAction implements Action { private String message;
public String getMessage() { return message; }
public void setMessage(String message) { this.message = message; }
@Override public String execute(String str) { return (getMessage() + " " + str).toUpperCase(); }
} UpperAction将其message属性与输入字符串相连接,并返回其大写形式。
package net.xiaxin.spring.qs; public class LowerAction implements Action { private String message; public String getMessage() { return message; }
public void setMessage(String message) { this.message = message; }
@Override public String execute(String str) { return (getMessage() + " " + str).toLowerCase(); }
} LowerAction将其message属性与输入字符串相连接,并返回其小写形式。
3. Spring配置文件(bean.xml) xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> Sprint Quick Start Hello
(请确保配置bean.xml位于工作路径之下,注意工作路径并不等同于CLASSPATH ,eclipse的默认工作路径为项目根路径,也就是.project文件所在的目录,而默认输出目录/bin是项目CLASSPATH的一部分,并非工作路径。 )
4. 测试代码 test包里SimpleTest.java的内容: package test;
import net.xiaxin.spring.qs.Action; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext;
public class SimpleTest { /** * @param args */ public static void main(String[] args) { SimpleTest test = new SimpleTest(); test.testQuickStart(); }
public void testQuickStart(){ ApplicationContext ctx = new FileSystemXmlApplicationContext("bean.xml");
Action action = (Action)ctx.getBean("TheAction");
System.out.println(action.execute("Rod Johnson")); } } 可以看到,上面的测试代码中,我们根据"bean.xml"创建了一个ApplicationContext实例,并从此实例中获取我们所需的Action实现。 运行测试代码,我们看到控制台输出: 2010-6-30 16:23:55 org.springframework.context.support.AbstractApplicationContext prepareRefresh 信息: Refreshing org.springframework.context.support.FileSystemXmlApplicationContext@133f1d7: startup date [Wed Jun 30 16:23:55 CST 2010]; root of context hierarchy 2010-6-30 16:23:55 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions 信息: Loading XML bean definitions from file [D:\程序\Java\testSpringXiaxin\bean.xml] 2010-6-30 16:23:55 org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons 信息: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@f7f540: defining beans [TheAction]; root of factory hierarchy HELLO ROD JOHNSON 最后一行为代码实现的输出内容(大写)。
项目中添加log4j的支持后,输出内容改变为如下: 2010-06-30 16:50:49 [ INFO ] Refreshing org.springframework.context.support.FileSystemXmlApplicationC