`

Spring

 
阅读更多
Spring

1. Spring IOC, AOP


AOP:

通知(Advice)
连接点(Jointpoint)
切入点(Pointcut)
切面(Aspect)
引入(Introduction)
目标(Target)
代理(Proxy)
织入(Weaving)


Spring提供了四种AOP的实现方式:
经典的基于代理的AOP
@AspectJ注解驱动切面
纯POJO切面
注入式AspectJ切面


Spring支持的五种通知类型:
Before(前)
After-returning(返回后)
After-throwing(抛出后)
Arround(周围)
Introduction(引入)

怎么实现AOP:
i.创建通知:实现接口,把其中几个方法实现了;
ii.定义切点和通知者:在Spring配置文件中配置这些信息;
iii:使用ProxyFactoryBean实现代理;



2. Spring子项目:

Spring Data: Spring Data JPA、Sprng Data Hadoop、Spring Data MongoDB、Spring Data Redis等等。通过Spring Data,开发者可以用Spring提供的相对一致的方式来访问位于不同类型的数据存储中的数据。

Spring Batch: 是一款优秀的、开源的大数据量并行处理框架。通过Spring Batch可以构建出轻量级的、健壮的并⾏处理应用,支 持事务、并发、流程、监控、纵向和横向扩展,提供统⼀的接口管理和任务管理。


Spring Integration: 在企业软件开发过程中,经常会遇到需要与外部系统集成的情况,这时可能会使用EJB、RMI、JMS等各种技术,也许你会引入ESB。如果你在开发时用了Spring Framework,那么不妨考虑Spring Integration

Spring Security(早期也叫Acegi),是较为成熟的子项目之一,是一款可定制化的身份验证和访问控制框架

Spring Roo,快速应用程序开发工具,可以在短时间内方便地生成应用程序

Spring Mobile,对Spring MVC的扩展,旨在简化移动Web应用的开发

Spring for Android,用于简化Android原生应用程序开发的Spring扩展

3. Spring实践:


AOP:

创建接口
package com.deppon.test04.bean;
public interface Sleepable {
    void sleep();
}

package com.deppon.test04.bean;
public class Human implements Sleepable {
    public void sleep() {
        System.out.println("睡觉吧");
    }
}

建立通知
package com.deppon.test04.bean;
import java.lang.reflect.Method;
import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;
public class SleepHelper implements MethodBeforeAdvice, AfterReturningAdvice {
    @Override
    public void before(Method arg0, Object[] arg1, Object arg2) throws Throwable {
        System.out.println("睡觉前要脱衣服");
       
    }
    @Override
    public void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable {
        System.out.println("起床后要穿衣服");
    }
}


在applicaitonContext.xml中定义切点和通知,使用ProxyFactoryBean产生代理,applicaitonContext.xml放在src/main/resources目录下。
<?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" 
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans  
     http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/tx  
     http://www.springframework.org/schema/tx/spring-tx-3.0.xsd 
     http://www.springframework.org/schema/aop  
     http://www.springframework.org/schema/aop/spring-aop-3.0.xsd 
     http://www.springframework.org/schema/context 
     http://www.springframework.org/schema/context/spring-context-3.0.xsd">     
    <!-- AOP -->
    <bean id="human" class="com.deppon.test04.bean.Human"></bean>
         
    <bean id="sleepHelper" class="com.deppon.test04.bean.SleepHelper">
    </bean>   
   
    <bean id="sleepPointcut" class="org.springframework.aop.support.NameMatchMethodPointcut">
        <property name="mappedName" value="sleep" />
    </bean>
   
    <bean id="sleepHelperAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
        <property name="advice" ref="sleepHelper" />
        <property name="pointcut" ref="sleepPointcut" />       
    </bean>
   
    <bean id="humanProxy" class="org.springframework.aop.framework.ProxyFactoryBean">
        <property name="target" ref="human" />
        <!--  <property name="interceptorNames" ref="sleepHelperAdvisor" /> -->
        <property name="interceptorNames">
            <list>
                <value>sleepHelperAdvisor</value>
            </list>
        </property>
    </bean>
</beans>

生成测试类:
package com.deppon.test04.bean;

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class AopTesting {

    private BeanFactory factory = null;     
    @Before 
    public void before() { 
        factory = new ClassPathXmlApplicationContext("/applicationContext.xml"); 
    }       
    @Test 
    public void testSpring() {   
        Sleepable sleeper = (Sleepable)factory.getBean("humanProxy");
        sleeper.sleep();
        Assert.assertTrue("Loading Utf OK", true);
    }
}

运行unit测试,输出结果:
睡觉前要脱衣服
睡觉吧
起床后要穿衣服


方法2,配置applicationContext.xml
<beans>
<bean id="human" class="com.deppon.test04.bean.Human"></bean>          
<bean id="sleepHelper" class="com.deppon.test04.bean.SleepHelper">
<bean id="sleepAdvisor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
        <property name="advice" ref="sleepHelper" />
        <property name="pattern" value=".*sleep" />
    </bean>
    <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>
</beans>

测试类
public class AOPTest {
    private BeanFactory factory = null; 
  @Before 
  public void before() { 
      factory = new ClassPathXmlApplicationContext("/applicationContext.xml"); 
  } 
   
  @Test 
  public void testSpring() { 
      Sleepable sleeper = (Sleepable)factory.getBean("human");
        sleeper.sleep();
        Assert.assertTrue("Loading Utf OK", true);
  }
}

pom.xml内容
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>SpringWeb</groupId>
  <artifactId>SpringWeb</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <packaging>war</packaging>
  <!-- 属性配置 --> 
  <properties> 
      <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
      <spring.version>3.2.3.RELEASE</spring.version>
  </properties> 
   
  <dependencies> 
    <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.10</version> 
      <scope>test</scope> 
    </dependency> 
     
    <!-- 添加Spring依赖 --> 
    <dependency> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-core</artifactId> 
        <version>${spring.version}</version> 
    </dependency> 
     
    <dependency> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-beans</artifactId> 
        <version>${spring.version}</version> 
    </dependency> 
     
    <dependency> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-context</artifactId> 
        <version>${spring.version}</version> 
    </dependency> 
     
    <dependency> 
        <groupId>org.springframework</groupId> 
        <artifactId>spring-jdbc</artifactId> 
        <version>${spring.version}</version> 
    </dependency> 
   
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-test</artifactId>
        <version>${spring.version}</version>
    </dependency>
                         
  </dependencies> 
  <build>
    <finalName>test04</finalName>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>
    </plugins>
  </build>
</project>




参考:

a. http://snowolf.iteye.com/blog/1627343 eclipse生成maven web项目
b. http://blog.csdn.net/yuguiyang1990/article/details/8799307 构建spring项目
c. http://josh-persistence.iteye.com/blog/1925895
d. http://www.infoq.com/cn/news/2013/01/spring-subprojects
e. http://limingnihao.iteye.com/blog/830409 spring mvc
f. http://www.360doc.com/content/10/1215/11/4957029_78291485.shtml AOP
g. http://www.mkyong.com/spring/spring-aop-examples-advice/ AOP
h. http://www.mkyong.com/spring3/spring-aop-aspectj-annotation-example/
分享到:
评论

相关推荐

    spring.net中文手册在线版

    Spring.NET是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序。它提供了很多方面的功能,比如依赖注入、面向方面编程(AOP)、数据访问抽象及ASP.NET扩展等等。Spring.NET以Java版的Spring框架为...

    spring源码合集spring源码合集

    spring

    spring3.1 官方全部jar包

    spring3.1官方所有的jar包 org.springframework.aop-3.1.RELEASE.jar org.springframework.asm-3.1.RELEASE.jar org.springframework.aspects-3.1.RELEASE.jar org.springframework.beans-3.1.RELEASE.jar org....

    Spring MVC 入门实例

    这篇文章将教你快速地上手使用 Spring 框架. 如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦! 首先, 我需要在你心里建立起 Spring...

    Getting started with Spring Framework: covers Spring 5(epub)

    Getting started with Spring Framework (4th Edition) is a hands-on guide to begin developing applications using Spring Framework 5. The examples (consisting of 88 sample projects) that accompany this ...

    最新版本的Struts2+Spring4+Hibernate4框架整合

    项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...

    spring源码分析(1-10)

    Spring源代码解析(一):Spring中的事务处理 Spring源代码解析(二):ioc容器在Web容器中的启动 Spring源代码分析(三):Spring JDBC Spring源代码解析(四):Spring MVC Spring源代码解析(五):Spring AOP获取Proxy ...

    spring3.0.0相关jar包

    spring3.0.0相关jar包 org.springframework.aop-3.0.0.RELEASE org.springframework.asm-3.0.0.RELEASE org.springframework.aspects-3.0.0.RELEASE org.springframework.beans-3.0.0.RELEASE org.springframework....

    SpringBoot+SpringCloud面试题.doc

    Spring boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具;Spring boot专注于快速、方便集成的单个个体,Spring Cloud是关注...

    spring 3.2.4.RELEASE jar包

    spring 3.2.4 Realease 的所有jar包: spring-context-3.2.4.RELEASE.jar spring-core-3.2.4.RELEASE.jar spring-beans-3.2.4.RELEASE.jar spring-test-3.2.4.RELEASE.jar spring-web-3.2.4.RELEASE.jar spring-aop-...

    spring-mock.jar

    Classes contained in spring-mock.jar: org.springframework.mock.jndi.ExpectedLookupTemplate.class org.springframework.mock.jndi.SimpleNamingContext.class org.springframework.mock.jndi....

    开发工具 spring-aop-4.3.6.RELEASE

    开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE开发工具 spring-aop-4.3.6.RELEASE...

    spring4.3.1官方全套jar包下载

    spring4.3.1全套jar下载。 4.3.1/spring-aop-4.3.1.RELEASE.jar 4.3.1/spring-aspects-4.3.1.RELEASE.jar 4.3.1/spring-beans-4.3.1.RELEASE.jar 4.3.1/spring-context-4.3.1.RELEASE.jar 4.3.1/spring-core-4.3.1....

    基于spring cloud 和vue全家桶的开源电商源码

    基于spring cloud 和vue全家桶的开源电商源码基于spring cloud 和vue全家桶的开源电商源码基于spring cloud 和vue全家桶的开源电商源码基于spring cloud 和vue全家桶的开源电商源码基于spring cloud 和vue全家桶的...

    Spring技术内幕:深入解析Spring架构与设计原理(第2部分)

    Spring技术内幕:深入解析Spring架构与设计原理(第2部分) 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自执笔!Java开发者社区和Spring...

    Spring in Action 中文版 第五部分(Spring in Action CN.005)

    Spring in Action CN.001&lt;br&gt;Spring in Action CN.002&lt;br&gt;Spring in Action CN.003&lt;br&gt;Spring in Action CN.004&lt;br&gt;Spring in Action CN.005&lt;br&gt;Spring in Action CN.006&lt;br&gt;Spring in Action CN.007&lt;br&gt;Spring in ...

    org.spring-framework-3.0.4. 所有jar

    org.springframework.aop-3.0.4.RELEASE.jar org.springframework.asm-3.0.4.RELEASE.jar org.springframework.aspects-3.0.4.RELEASE.jar org.springframework.beans-3.0.4.RELEASE.jar org.springframework....

    尚硅谷SpringCloud第2季2020版.mmap

    一篇很好的springCloud学习的思维导读,详细的介绍了,springCloud的搭建步骤以及各组件的说明讲解 涵盖 Eureka服务注册与发现 Zookeeper服务注册与发现 Consul服务注册与发现 Ribbon负载均衡服务调用 OpenFeign...

    spring cloud 体系版本选型,涉及spring cloud alibaba spring boot spring cloud

    spring boot , spring cloud alibaba, spring cloub 版本选型

    Spring从入门到精通 源码

    本书由浅入深,循序渐进地介绍了Spring的体系结构和相关知识点,目的是帮助初学者快速掌握Spring,并能使用Spring进行应用程序的开发。本书最大的特色在于每章都是由浅入深,从一个简单的示例入手,让读者快速了解本...

Global site tag (gtag.js) - Google Analytics