`
run_wang
  • 浏览: 168794 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

阐释Spirng(入门)

阅读更多
Spring是一个开源的控制反转(Inversion of Control ,Ioc) 和面向切面编程(AOP)的容器框架,它的主要目的是简化企业开发,
【IoC全名】:Inversion of Control ,翻译过来就是控制反转的意思,如果真正的想了解IoC控制反转到底什么,需要先了解DI(dependency Injection),也就是依赖注入。
依赖注入的优点:
Spring能有效地组织J2EE应用各层的对象,不管是控制层的Action对象,还是业务层的Service对象,还是持久层的DAO对象,都可在Spring的管理下有机的协调、运行。Spring将各层的对象以松耦合的方式组织在一起,Action对象无需关心Service对象的具体实现,Service对象也无需关心持久层对象的具体实现,各层对象的调用完全面向接口。当系统需要重构时,代码的改写量将大大减少。
注:依赖注入让bean于bean之间以配置文件组织在一起,而不是以硬编码的方式耦合在一起。
为什么要使用Spring也是就说Spring框架优点:
在项目中引入Spring立即可以带来一下好处:
1:降低组件之间的耦合度,实现软件各层之间的解耦。
    COntroller(控制层)----->Services(服务层)----->DAO(持久层)
通常我们在开发应用的时候,我们经常可以看到有这么一种结构:在控制层调用服务层,在服务层有可能再调用DAO层,如果使用Spring开发这样就可使各个层 互相独立,他们之间就不会发生代码之间的关联
如果我们要实现软件各层之间的解藕是通过面向接口实现的。
2:可以使用容器提供众多服务,如:事物管理服务、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务。也不需要处理复杂的事务传播
3:容器提供单例模式支持,开发人员不再需要自己编写实现代码。
4:容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。
5:容器 提供的众多辅佐类,使用这些类能够加快应用的开发。如:JdbcTemplate、Hibernate Template。
6:Spring对于主流应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等 这样更便于应用的开发



Spring【 叙述】

Spirng集成IoC 、AOP

实际上对Spring的发展而言,它更多的情况下是使用Spring管理Hibernate及事务各种方面的管理
在了解Spring之前,必须要了解 【关于对象的产生问题】
因为在整个Spring里主要的一个就是对象产生的问题 这样就可以引申到接口这个重要概念上。在整个Spring中最大的重点就在这个接口上。
在接口中只要出现接口我们就应该联想到工厂设计


(针对接口操作)

对于产生一个对象 java中那几种常见的做法:
方法一:一直用new的方式 开辟对象
接口类型  对象名称=new  接口子类();
这种方法确实可以为街口实例化 ,但是在客户端调用时必须要明确知道有哪几个子类,直接造成了一个重要的缺点:两个程序之间紧密耦合

代码如下:

package com.xinyang.Inter;

public interface Fruit {
//吃水果
public void eat();
}



package com.xinyang.Imp;

import com.xinyang.Inter.Fruit;

public class Apple implements Fruit {
public void eat(){
  System.out.println("吃苹果....");
}
}



package com.xinyang.Imp;

import com.xinyang.Inter.Fruit;

public class Orange implements Fruit {

public void eat() {
  // TODO Auto-generated method stub
  System.out.println("吃橘子....");
}

}

下面来看下测试类:
package com.xinyang.services;

import com.xinyang.Imp.Apple;
import com.xinyang.Inter.Fruit;
import com.xinyang.factory.FruitFactory;

public class TestDemo01 {
public static void main(String[] args){
// Fruit f=FruitFactory.getfruitInstance(3);
  Fruit f=new Apple();
  f.eat();
}
}

这个客户端假设我们不要苹果换成橘子 ,这样需要修改客户端 ,这就是设计上的缺陷 ,整一个垃圾成品,所以我们采用下面的工厂设计
package com.xinyang.factory;

import com.xinyang.Imp.Apple;
import com.xinyang.Imp.Orange;
import com.xinyang.Inter.Fruit;

public class FruitFactory {
public static Fruit getfruitInstance(int i){
  Fruit f=null;
  if(i==1){
   //当i=1时认为是苹果
   f=new Apple();
  }
  if(i==2){
   //当1=2时认为是橘子
   f=new Orange();
  }
  return f;
}

}

客户端应改成
package com.xinyang.services;

import com.xinyang.Imp.Apple;
import com.xinyang.Inter.Fruit;
import com.xinyang.factory.FruitFactory;

public class TestDemo01 {
public static void main(String[] args){
int i=1;
  Fruit f=FruitFactory.getfruitInstance(i);
 
  f.eat();
}
}



这样我们可以根据i值进行选择 。

方法二:使用工厂设计模式:引进工厂类;通过上述代码可以解决客户端的与具体子类之间的耦合,确实可以解决耦合问题,但是在整个程序中,只要有一个接口就需要一个接口,如果接口过多则会造成工程过多
方法三:使用泛着机制Class.forName
联合IO操作,联合工厂设计,联合Properties类(代码量大,且不容易管理)
方法四:使用对象克隆:Object类中的clone方法(需要具体一个类的对象所以不予考虑)

Spring提供的是一个容器,是一个开发框架,所以通过Spring我们可以完成以上叙述前三种方法实现的功能 而这个功能我们就可以叫做IOC
通过上述我们可以知道一点 :Spring最重要是完全面向接口的设计,这也是开发应用过程中用到最多了 ,当然还有一些高级的管理。

Spring开发包分为两种:
核心Spring包:包含了Spring核心的开发文件
依赖Spring包:包含了大量的其他开源组件(文件比较大)

可以从www.springframeword.org下载最新的开发包

Spring环境搭建:
一:建立web工程 或者java项目都可以
二:我们可以从spring官方下载最新的jar导进去 或者 利用IDE工具集成的框架进行引入

在这里引入所需的核心jar即可

所有的容器框架都需要进行配置的,Spring配置文件配置的名称我们可以随意取,文件可以存放到任何目录下,我们可以从Spring参考手册或者Spring例子中就就可以得到Spirng配置模板

下面实例化spring容器
实例化Spring容器常用的两种方式
方法一:
在类路径下寻找配置文件来实例化容器
ApplicationContext ctx=new ClassPathXMLApplicationContext(new String[]{"applicationContext.xml"});

方法二:
在文件系统路径下寻找配置文件来实例化容器
ApplicationContext ctx=new FileSystemXMLApplicationContext(new String[]{"x://xxx.xml"});

注:Spring的配置文件可以指定多个,可以通过Spring数组传入,第二种方式在测试时候还可以使用,不推荐使用
配置文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
</beans>

下面进行单元测试
在src目录  -

->右键 -->other-->java--->JUnit --->JUnit Test Case在这里我们选JUnit版本是4
代码如下:

package com.xinyang.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class SpringTest {
@Test
public void instanceSpring(){
  ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
 
}
}

根据执行instanceSpring方法测试Spring环境搭建是否成功

Spring环境搭建完成后业务Bean就可以交给Spring进行管理,下面实现将外部的容器交给Spring进行管理也就是也就是所谓的依赖注入

<bean id="" name=""></bean>
id是为这个bean取的一个名称,这个Spring容器中是唯一的,如果我们需要获取这个bean我们是通过这个名称也即是id属相指定的名称来获取的,name属性同样是为bean取名的,id属性本身就属于xml的一个属性,这个属性受到xml解析器进行验证,id的值是不能包含特殊字符的 像/ 有的时候我们为bean取的名称需要这样特殊字符这时候我们就需要指定name属性,所以没有特殊字符我们指定id属性就可以了 这也就是为什么有了id有时还需要指定name属性!
spring开发团队建议我们bean的取名首字母小写

<bean id="fru" class="com.xinyang.Imp.Apple"></bean>
这样这个bean就创建好了 需要强调的是:这时候这个bean就可以由spring容器帮我们创建和维护 ,我们用到这个bean只需要获取就可以而不是创建

三:更该单元测试类 进行测试
package com.xinyang.test;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.xinyang.Inter.Fruit;
import com.xinyang.Inter.PersonService;


public class SpringTest {
@Test
public void instanceSpring(){
  ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
  Fruit f=(Fruit)ctx.getBean("fru");
  f.eat();
}
}
如果把<bean id="fru" class="com.xinyang.Imp.Apple"></bean>改成

<bean id="fru"    class="com.xinyang.Imp.Orange"></bean>       

这样我们就可以得到我们想要的结婚,而不去更改业务bean

使用Spring之后可以看出工厂类被取消了 而由spring代替工厂,证明spring中主要有两个操作,一个是替代工厂,第二个是所有的工厂在资源文件(.xml)进行管理
客户端代码之中 ,所有的代码的设计重要性变为接口

轻量级和重量级概念划分:
划分一个应用时候属于轻量级还是重量级,主要看它使用了多少服务,使用的服务越多,容器要为普通java对象做的工作就越多,必然会影响到应用的发布时间或者运行性能
对于Spirng容易,它提供了很多服务,但是这些服务并不是默认为应用打开的,应用需要某种服务,还需要指明使用该服务,如果应用使用的服务很少,如:只使用spring核心服务,那么就可以认为此事应用属于轻量级的,如果应用使用了Spring提供的大部分服务,只是应就属于重量级的。









对已有的方法抽取接口:(通过Eclipse向导实现) 业务类-->Refactor-->Extract Interface(抽取接口)
当然接口和实现类最好不要同一目录下 通过 名称-->Refactor-->Move 到具体的某个包中
分享到:
评论

相关推荐

    spring2.5学习PPT 传智博客

    1. **全面阐释Spring及其功能** - Spring是一个开源的IoC和AOP框架,它通过提供容器管理和依赖注入来减少组件间的耦合。 - IoC使应用程序不再负责对象的创建和管理,而是由Spring容器负责,降低了组件间的依赖。 ...

    参考资料-书法的形态与阐释.zip

    《书法的形态与阐释》是一份深入探讨中国书法艺术的参考资料,主要涵盖了书法的基本形态、艺术特点、演变历程以及如何阐释书法作品等多个方面。这份压缩包包含了一个名为“书法的形态与阐释.pdf”的文件,我们可以从...

    阐释者光标样式

    "阐释者光标样式"是一种特殊的光标设计,灵感来源于热门动漫《刀剑神域》中的主角所使用的武器——阐释者。这个光标样式为用户提供了个性化电脑体验的机会,特别是对于动漫爱好者来说,它能让桌面变得更加独特且富有...

    Spring及其各

    1. **Spring全面阐释**:Spring框架是一个开源的Java平台,它为构建应用程序提供了全面的支持。它不仅涵盖了依赖注入(DI)和面向切面编程(AOP),还提供了一个用于处理事务、数据访问、Web应用、安全性和集成的...

    毕业设计论文作品阐释模板.doc

    【毕业设计论文作品阐释模板】 毕业设计论文是学术研究的重要组成部分,尤其对于美术学院的学生而言,它是展现个人专业技能和理论理解的关键环节。这个模板旨在指导学生如何规范地撰写和组织毕业设计论文,确保作品...

    民法典体系下合伙份额法律属性阐释.docx

    《民法典》的出台对合伙份额的法律属性进行了深刻的阐释,揭示了我国在合伙法领域中的二元区分体系,即契约型合伙与组织型合伙。这两种合伙形式各有其独特的法律属性,反映了不同法律传统的融合。 契约型合伙,主要...

    01_传智播客JPA详解_全面阐释和精彩总结JPA

    Java Persistence API(JPA)是Java平台上的一个标准,用于管理关系数据库中的数据。...在“01_传智播客JPA详解_全面阐释和精彩总结JPA”这个资源中,你将找到关于JPA的深入讲解和实用技巧,帮助你全面掌握这一技术。

    青春的阐释动态文本PPT欣赏.rar

    这是一套青春的阐释动态文本PPT欣赏,第一PPT模板网提供幻灯片模板免费下载; PPT模板是动态PowerPoint模板,用蓝紫色作为主色调,用大海、船作为PPT背景图片,画面非常绚丽唯美,PPT文本带有精致的动态演示以及...

    opc应用程序入门(中文)

    讲解注释很详细,适合刚刚入门工业自动化的软件开发工程师。原理阐释的由浅入深,特别适合快速上手开发自己的opc客户端。比起网上各种不能运行的源码或者注释不到位需要自己花时间和精力去吃透的版本,花一天(真的...

    日本特摄剧奥特曼系列的文化阐释_徐锐.caj

    日本特摄剧奥特曼系列的文化阐释_徐锐.caj

    linux初级入门完整教程

    详细的阐释了linux的初级理论,由浅入深,通俗易懂。

    认知的算法阐释:人工智能对当代认识论研究的启示.pdf

    在探讨认知的算法阐释与人工智能对当代认识论研究的启示时,首先需明确认知与算法的基本概念以及它们之间的相关性。认知通常指的是生物体获取、处理、存储、使用信息的能力,而算法是完成特定任务的一系列指令。在...

    Spirng学习详细讲述了Sping的学习过程,非常经典的学习Sping

    通过"01_传智播客Spring2.5视频教程_全面阐释Spring及其各项功能",你将有机会深入学习上述所有概念,并通过实例来巩固理解。这个教程应该涵盖了从基础到高级的多个层次,帮助你从零开始掌握Spring框架,并逐步成长...

    传智播客黎活明struts2.5视频教学源代码1-18集

    为了解剖Spring容器原理,黎活明老师在课堂现场亲手编写一个mini版的Spring容器,借此向大家阐释清楚Spring内部的核心代码和底层工作原理。本套视频教程是一个普通程序员向高手进阶的绝佳学习资料,值得大多数有经验...

    反对阐释 PDF

    清晰,是关于理性和深沉的典范,值得下载和浏览。

    George Steomer及其翻译阐释运作汇编.pdf

    《乔治·斯坦纳及其翻译阐释运作汇编》是关于翻译阐释学的重要研究,作者乔治·斯坦纳是一位在文学、语言和哲学领域具有深远影响力的学者。本文将深入探讨斯坦纳的观点,特别是他在翻译阐释学中的贡献。 翻译阐释学...

    传智播客黎活明struts源码

    为了解剖Spring容器原理,黎活明老师在课堂现场亲手编写一个mini版的Spring容器,借此向大家阐释清楚Spring内部的核心代码和底层工作原理。本套视频教程是一个普通程序员向高手进阶的绝佳学习资料,值得大多数有经验...

    乡村原创短视频中身体呈现的文化阐释——以快手APP中代表性账号及其作品为例.pdf

    【乡村原创短视频与身体文化阐释】 乡村原创短视频在当今社会中扮演了重要角色,尤其在快手APP这样的平台上,乡村居民通过自我表达和创新,展示了丰富多样的乡村生活和文化。这种现象受到技术进步、商业推广和个体...

    基于价值阐释的上海民生码头的保护和利用.docx

    【标题】:基于价值阐释的上海民生码头保护与利用 【描述】:本文探讨了上海民生码头作为工业遗产的保护和利用,强调了价值阐释在其中的重要作用。 【标签】:工业遗产保护, 价值阐释与展示, 民生码头 【正文】: ...

Global site tag (gtag.js) - Google Analytics