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、SpringMVC和Mybatis是Java开发中最常用的三大开源框架,它们的整合使用,通常被称为SSM框架。这个框架组合提供了完整的后端服务解决方案,包括依赖注入(DI)、面向切面编程(AOP)、模型-视图-控制器(MVC...
弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...
Spring Integration + Spring WS 整合 在 Java 领域中,Spring Integration 和 Spring WS 是两个常用的框架,它们分别负责集成系统和 Web 服务。今天,我们将探讨如何将这两个框架整合在一起,实现一个完整的 Web ...
包含spring 3.0.5的所有jar文件: org.springframework.aop-3.0.5.RELEASE.jar org.springframework.asm-3.0.5.RELEASE.jar org.springframework.aspects-3.0.5.RELEASE.jar org.springframework.beans-3.0.5.RELEASE...
Spring Batch是一个轻量级的,完全面向Spring的批处理框架,可以应用于企业级大量的数据处理系统。Spring Batch以POJO和大家熟知的Spring框架为基础,使开发者更容易的访问和利用企业级服务。Spring Batch可以提供...
Spring框架是Java应用程序开发中的一个核心组件,它提供了一个丰富的IOC(Inversion of Control,控制反转)和AOP(Aspect-Oriented Programming,面向切面编程)功能,使得开发者能够更方便地管理对象和实现模块化...
在Java开发领域,Spring Boot和Spring Batch的整合是构建高效批处理系统的一种常见方式。Spring Boot以其简洁的配置和快速的启动能力深受开发者喜爱,而Spring Batch作为Spring框架的一部分,专注于批量处理任务,...
在构建分布式系统时,Spring Cloud Gateway 作为微服务架构中的边缘服务或 API 网关,扮演着至关重要的角色。它负责路由请求到相应的微服务,并可以提供过滤器功能,如限流、熔断等。而Spring Security 则是 Java ...
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 框架. 如果你手上有一本《Spring in Action》, 那么你最好从第三部分"Spring 在 Web 层的应用--建立 Web 层"开始看, 否则那将是一场恶梦! 首先, 我需要在你心里建立起 Spring...
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 ...
介绍一个基于Spring Boot 3.0、Spring Cloud 2022 & Alibaba的微服务RBAC权限管理系统。该系统可以实现微服务RBAC权限管理,通过RBAC权限管理机制对用户访问系统的权限进行限制,从而提高系统的安全性和可用性。同时...
项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...
Spring Cloud和Spring Boot是两个非常重要的Java开发框架,它们在微服务架构中扮演着核心角色。Spring Boot简化了创建独立的、生产级别的基于Spring的应用程序的过程,而Spring Cloud则为开发者提供了快速构建分布式...
《Spring AI Core 0.8.1:开启人工智能之旅》 在现代软件开发领域,Spring框架以其强大的功能和灵活性,已经成为Java开发中的首选框架之一。而Spring AI Core则是Spring生态系统中专门为人工智能(AI)和机器学习...
《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从本书中参透Spring框架的出色架构和设计思想,还能从...
Spring 框架是 Java 开发中的一个核心组件,它为构建企业级应用程序提供了全面的编程和配置模型。Spring 4.3.14 是该框架的最后一个4.x系列正式版,发布于2018年2月24日。这个版本在Spring 5.0发布之前提供了一个...
在IT行业中,Spring框架是Java应用开发中的一个关键组件,它提供了一整套服务来简化企业级应用的构建。RabbitMQ则是一个流行的开源消息队列系统,它基于AMQP(Advanced Message Queuing Protocol)协议,用于高效地...
Spring Cloud系列教程 Spring Boot Spring Cloud Stream 和 Kafka案例教程 springcloud生产者与消费者项目实战案例 Spring Cloud 中断路器 Circuit Breaker的应用 配置 Spring Cloud Config Server Spring Cloud ...
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。Spring MVC4是当前zuixin的版本,在众多特性上有了进一步的提升。, 在精通Spring...