简化Spring的java开发

1.1简介

区别于EJB的特性 简化javaBean,为了降低java开发的复杂性,Spring采取了以下4种关键策略:

  • 基于POJO的轻量级和最小入侵性编程
  • 通过依赖注入和面向接口实现松耦合
  • 基于切面和惯例进行声明式编程
  • 通过切面和模板减少样板式代码

1.2依赖注入(DI)

? 依赖注入到底是什么呢?任何一个有实际意义的应用都会由两个或者多个类组成,这些类进行相互协作来完成特定的业务逻辑.按照传统的做法,每个对象负责管理与自己相互协作的对象(即它所依赖的对象)的引用,这将会导致高度耦合和难以测试的代码.

例子:

骑士去探险

/**
 * 骑士
 */
public interface Knight {
    public void embarkOnQuest();
}
/**
 *
 * 探险类型
 */

public interface Quest {
    public  void embark();
}
/**
 * 勇敢的骑士
 */

public class BraveKnight implements Knight {

    private Quest quest;

    //quest被注入进来(构造注入)
    public BraveKnight(Quest quest) {
        this.quest = quest;
    }

    public void embarkOnQuest() {
        quest.embark();
    }
}

这个例子中的Quest是通过构造参数传递进来的,这里的重点是BraveKnight没有与任何特定的Quest实现发生耦合.对于它来说,被要求挑战的探险任务只要实现了Quest接口,那么具体是哪种类型的探险就无关紧要了.这就是DI所带来的最大收益 - - 松耦合.

对依赖进行替换的时候只需要给Quest的接口一个实现类即可

/**
 * 任务的实现类
 */
public class QuestImpl implements Quest{
    //从事 开始方法
    public  void embark() {
        System.out.println("开始探险");
    }
}
/**
     * 进行依赖的测试
     */
    @Test
    public void KinghtShouldEmbarkOnQuest() {
        //向上转型
        Quest questimpl = (Quest) new QuestImpl();
        //注入Quest的实现类QuestImpl
        BraveKnight knight = new BraveKnight(questimpl);
        //执行方法
        knight.embarkOnQuest();
    }

1.3通过Spring的Xml进行配置

application.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       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.xsd">

<!--注入BraveKnight-->
<bean id="braveKnight" class="BraveKnight">
    <constructor-arg ref="quest"/>
</bean>
    <!--注入QuestImpl-->
    <bean id="quest" class="QuestImpl"></bean>
</beans>

进行Spring的测试

public static void main(String[] args) {
        //加载配置文件 加载Spring的上下文
        ApplicationContext app = new ClassPathXmlApplicationContext("classpath:application.xml");
        //获取bean
        BraveKnight bean = app.getBean(BraveKnight.class);
        //调用方法
        bean.embarkOnQuest();
    }

1.4应用切面编程(AOP)

? 上面已经介绍了DI能够让互相协作的软件组织 保持松耦合,而面向切面编程(AOP)允许你把遍布应用各处的功能分离出来形成可重用的组件.

? 常见的AOP抽离出来的组件有:日志模块;事务模块;安全模块等.

? AOP能够让服务模块化,并以声明的方式将他们应用到他们需要影响的组件中去.这样做的好处是可以让这些组件具有更高的内聚性并且更加关注自身的核心业务,完全不需要了解设计系统服务所带来的复杂性,总之,AOP能够确保POJO的简单性. 我们可以把切面想象为覆盖在很多组件之上的一个外壳,如下图所示:

例子:还是以刚才的骑士为例,我们熟知吟游诗人这个服务类会来记载骑士的所有事迹.

主要的类如下:

//吟游诗人作为切面
public class Minstrel {

    public void  singBeforeQuest(){
        //探险之前
        System.out.println("Before: Fa la la ,the Knight is so breave!");
    }

    public void  singAfterQuest(){
        //探险之后
        System.out.println("After: Tee hee hee ,the breave Knight!");
    }
}

AOP的XMl配置的实例如下:

<?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:aop="http://www.springframework.org/schema/aop"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">

    <!--注入BraveKnight-->
    <bean id="braveKnight" class="BraveKnight">
    <constructor-arg ref="quest"/>
    </bean>

    <!--注入QuestImpl-->
    <bean id="quest" class="QuestImpl"/>

    <!--AOP实例-->
    <!--注入Minstrel-->
    <bean id="minstrel" class="com.aop.Minstrel"/>
    <aop:config>
        <!--声明切面-->
        <aop:aspect ref="minstrel">
            <!--定义切点 这里定义的是骑士的方法-->
            <aop:pointcut id="embark" expression="execution(* QuestImpl.embark(..))"/>
            <!--声明前置通知-->
            <aop:before pointcut-ref="embark" method="singBeforeQuest"/>
            <!--声明后置通知-->
            <aop:after pointcut-ref="embark" method="singAfterQuest"/>
        </aop:aspect>
    </aop:config>
</beans>

AOP的主要配置涉及到切面和切点,我们先定义横切面的类的Bean并进行注入,然后我们需要相关的类的方法作为切点,AOP的主要用法有:前置通知;后置通知;环绕通知,用于在核心代码前面后面加入相关的切面的代码的实现.

原文地址:https://www.cnblogs.com/socketqiang/p/11315000.html

时间: 2024-10-20 08:25:37

简化Spring的java开发的相关文章

第1章—Spring之旅—简化Spring的java开发

简化Spring的java开发 1.1简介 区别于EJB的特性 简化javaBean,为了降低java开发的复杂性,Spring采取了以下4种关键策略: 基于POJO的轻量级和最小入侵性编程 通过依赖注入和面向接口实现松耦合 基于切面和惯例进行声明式编程 通过切面和模板减少样板式代码 1.2依赖注入(DI) ? 依赖注入到底是什么呢?任何一个有实际意义的应用都会由两个或者多个类组成,这些类进行相互协作来完成特定的业务逻辑.按照传统的做法,没个对象负责管理与自己相互协作的对象(即它所依赖的对象)的

借助Spring Boot 简化 Spring 开发

Spring Boot 是令人兴奋的新项目,它提供了四个主要的特性,能够改变开发Spring应用程序的方式. 1.Spring Boot Starter: 他将常用的依赖分组进行了整合,将其合并到一个依赖中,这样就可以一次性添加到项目的Maven或Gradle构建中. 2.自动配置: Spring Boot 的自动配置特性利用了Spring 4对条件化配置的支持,合理地推测应用所需的bean 并自动化配置它们. 3.命令行接口: Spring 的 CLI 发挥了Groovy 编程语言的优势,并结

Spring学习(一)--简化Java开发,认识Spring

一.传统Java开发弊端 在传统的开发之中,任何一个有实际意义的应用都会由两个或更多的类所组成,这些类之间相互协调来完成特定的业务逻辑,按照传统的做法,每个对象负责管理与自己相互协作的对象(即他所依赖的对象)的引用,这将会导致高耦合度和难以测试的代码.--给出一个示例代码:分派一个拯救公主的骑士去完成拯救公主的任务: 1 package knights; 2 3 /** 4 * @author : S K Y 5 * @version :0.0.1 6 */ 7 public class Res

Spring Boot入门,一步一步简化,实现Spring Web项目开发

一. Spring Boot介绍 Spring Boot诞生的目的就是用来简化Spring应用开发过程.该框架使用了特定的方式来进行配置,从而使得开发人员不在需要定义一系列样板化的配置文件,而专注于核心业务开发.帮助开发人员快速的构建出基于Spring的应用.它会在后台整合项目所需的第三方依赖类库或框架,不再需要编写复杂的XML配置文件,仅通过几行代码就能实现一个可运行的Web应用. 直接嵌入 Tomcat 或 Jetty 服务器,不需要部署 WAR 文件. 提供许多基于Maven的 POM配置

Spring Boot 针对 Java 开发人员的安装指南

Spring Boot 可以使用经典的开发工具或者使用安装的命令行工具.不管使用何种方式,你都需要确定你的 Java 版本为 Java SDK v1.8 或者更高的版本.在你开始安装之前,你需要确定你当前安装的 Java 版本满足系统运行的需要. 你可以使用下面的命令进行查看: $ java -version 如果你是 Java 项目开发的新手或者你希望实践使用 Spring Boot.你应该使用 Spring Boot 命令行工具(Spring Boot CLI),否则的话,请阅读有关经典安装

知道为什么叫spring吗,因为它java开发迎来了春天

Spring 顶级框架 谈及微服务,作为当前主流的企业框架Spring,它提供了一整套相关的顶级项目,能让开发者快速的上手实现自己的应用,今天就介绍下Spring旗下各个顶级项目: Spring IO platform:用于系统部署,是可集成的,构建现代化应用的版本平台,具体来说当你使用maven dependency引入spring jar包时它就在工作了. Spring Boot:旨在简化创建产品级的 Spring 应用和服务,简化了配置文件,使用嵌入式web服务器,含有诸多开箱即用微服务功

每个Java开发人员都应该知道的4个Spring注释

这是每个Java开发人员都应该知道的最重要的Spring注解.感谢优锐课老师对本文提供的一些帮助. 随着越来越多的功能被打包到单个应用程序或一组应用程序中,现代应用程序的复杂性从未停止增长.尽管这种增长带来了一些惊人的好处,例如丰富的功能和令人印象深刻的多功能性,但它要求开发人员使用越来越多的范例和库.为了减少开发人员的工作量以及开发人员必须记住的信息量,许多Java框架都转向了注解. 特别是Spring,它以注解的使用而闻名,它使开发人员仅用少数几个注解就可以创建完整的表示状态转移(REST)

JAVA之旅-简化java开发

为了降低java开发的复杂性,spring采取了以下4种关键策略 基于POJO的轻量级和最小侵入行编程 为使不让应用与框架绑死,一个bean不会实现,继承或者导入Spring API相关的任何东西,只是一个普通的java对象. 2.  通过依赖注入和面相接口实现松耦合 每个对象负责管理与自己相互协作的对象(即它所依赖对象)的引用,这将会导致高度耦合和难以测试的代码. 高度耦合的意思是一个类要管理自己的对象, public class PerformShow implements Perform{

java开发SSM框架的搭建(SpringMVC+Spring+MyBatis)

由于某些原因,重装系统,java-web开发虽然顺手,但烦人的一点是开发环境的搭建.差不多折腾了一整天,笔者在这里把SSM开发环境的搭建重新清理一遍,以飨读者,也供自己以后参考.善于总结,是做好每份工作必备的素质之一. 1安装java虚拟机-JDK(1.7_51) 详见笔者博文:http://blog.csdn.net/gisredevelopment/article/details/24304085 2 安装MyEclipse(2014专业版) 下载地址:http://www.myeclips