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是一个应用程序框架,其目的是协助开发人员创建企业级的.NET应用程序。它提供了很多方面的功能,比如依赖注入、面向方面编程(AOP)、数据访问抽象及ASP.NET扩展等等。Spring.NET以Java版的Spring框架为...
spring
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 ...
项目原型:Struts2.3.16 + Spring4.1.1 + Hibernate4.3.6 二、 项目目的: 整合使用最新版本的三大框架(即Struts2、Spring4和Hibernate4),搭建项目架构原型。 项目架构原型:Struts2.3.16 + Spring4.1.1 + ...
Spring源代码解析(一):Spring中的事务处理 Spring源代码解析(二):ioc容器在Web容器中的启动 Spring源代码分析(三):Spring JDBC Spring源代码解析(四):Spring MVC Spring源代码解析(五):Spring AOP获取Proxy ...
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....
Spring boot 是 Spring 的一套快速配置脚手架,可以基于spring boot 快速开发单个微服务,Spring Cloud是一个基于Spring Boot实现的云应用开发工具;Spring boot专注于快速、方便集成的单个个体,Spring Cloud是关注...
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-...
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...
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技术内幕:深入解析Spring架构与设计原理(第2部分) 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自执笔!Java开发者社区和Spring...
Spring in Action CN.001<br>Spring in Action CN.002<br>Spring in Action CN.003<br>Spring in Action CN.004<br>Spring in Action CN.005<br>Spring in Action CN.006<br>Spring in Action CN.007<br>Spring in ...
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学习的思维导读,详细的介绍了,springCloud的搭建步骤以及各组件的说明讲解 涵盖 Eureka服务注册与发现 Zookeeper服务注册与发现 Consul服务注册与发现 Ribbon负载均衡服务调用 OpenFeign...
spring boot , spring cloud alibaba, spring cloub 版本选型
本书由浅入深,循序渐进地介绍了Spring的体系结构和相关知识点,目的是帮助初学者快速掌握Spring,并能使用Spring进行应用程序的开发。本书最大的特色在于每章都是由浅入深,从一个简单的示例入手,让读者快速了解本...