1. POM-

1.1 中央仓库

1.2 各包作用

  1. spring-core.jar 核心工具类
  2. spring-beans.jar 是所有应用都要用到的,它包含访问配置文件、创建和管理bean 以及进行IoC/DI操作相关的所有类。
  3. spring-context-support.jar spring容器上下文,包含加载xml ClassPathXmlApplicationContext
  4. spring-aop.jar 使用基于AOP Spring特性,如声明型事务管理(Declarative Transaction Management
  5. spring-dao.jar Spring DAOSpring Transaction 进行数据访问的所有类。
  6. spring-jdbc.jar Spring JDBC 数据访问进行封装的所有类。
  7. spring-support.jar 包含支持UI模版(VelocityFreeMarkerJasperReports),邮件服务,脚本服务(JRuby),缓存CacheEHCache),任务计划Schedulinguartz)方面的类。
  8. spring-web.jar Web开发时所需的核心类,包括自动载入Web Application Context 特性的类、Struts JSF 集成类、文件上传的支持类、Filter 类和大量工具辅助类。
  9. spring-webmvc.jar Spring MVC 框架相关的所有类。包括框架的ServletsWeb MVC框架,控制器和视图支持。
  10. spring-remoting.jar 支持EJB、远程调用RemotingRMIHessianBurlapHttp InvokerJAX-RPC)方面的类。
  11. spring-jmx.jar 这个jar包提供了对JMX 1.0/1.2的支持类。
  12. spring-jms.jar JMS 1.0.2/1.1的支持类。
  13. spring-jca.jar JCA 1.0的支持。
  14. spring-jdo.jar JDO 1.0/2.0的支持。
  15. spring-jpa.jar JPA 1.0的支持。
  16. spring-toplink.jar TopLink框架的支持。
  17. spring-ibatis.jar iBATIS SQL Maps的支持。
  18. Spring-test.jar Spring自带的测试套件,包含SpringJUnit4ClassRunner
  19. spring-mock.jar Spring 测试套件使用了其中大量mock 类,这样测试就更加简单。模拟HttpServletRequest HttpServletResponse 类在Web 应用单元测试是很方便的。并且提供了对JUnit的支持。

2. 装配Bean

2.0 高级装配技巧

2.0.1 Bean作用域@Scope-默认Singleton

  1. //标注在@Component上
  2. 单例(Singleton) @Scope(ConfigurableBeanFactory.SCOPE_SINGLETON)
  3. 原型(Prototype) @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE) 每次从spring上下文创建一个新的实例
  4. 会话(Session) @Scope(WebApplicationContext#SCOPE_REQUEST) web应用时每个会话创建新的
  5. 请求(Request) @Scope(WebApplicationContext#SCOPE_SESSION) web应用时每个请求创建
  6. //使用xml标注

2.0.2 条件化bean-满足条件才注入

  1. //其中 MagicExistCondition implements interface Condition, matches方法返回true时才加载
  2. @Component
  3. @Conditional(MagicExistCondition.class)
  4. public class SgtPepers implements CompactDisc {}

2.0.3 @Profile 按开发/发布状态加载不同bean

  1. a). 可标注在Classmethod上, 可选值 dev / prod
  2. b). 取值依赖两个独立的属性,spring.profiles.active/spring.profiles.default 的值,都空时不会加标注了@Profile的地方
  3. c). 设置两个属性: 作为DispatchServlet的初始化参数、作为Web应用的上下文参数、JNDI条目、环境变量、JVM的系统属性、
  4. 测试时使用@ActiveProfiles("dev") 进行指定
  5. @Bean
  6. @Profile("dev")
  7. public CDPlayer cdPlayer(CompactDisc cd) {
  8. return new CDPlayer(cd);
  9. }

2.1 自动化装配-组件扫描/自动装配

2.1.1 备注

  1. a). 组件bean默认名为首字母小写,或使用@Component("lonelyHeartClub")形式进行指定
  2. b). @ComponentScan 默认只扫描配置类(即@Configuration)所在的package下的目录
  3. @ComponentScan(basePackages = { "other.tet3","t1.t2" }) //可指定多个扫描目录

2.1.2 @Autowired 可标注属性、构造器和任意方法

  1. a). 不管标注在任意地方,假如有且仅有一个bean匹配依赖,那么这个bean会被装配进来
  2. b). 如果没有匹配的bean,创建Context时会抛出异常,除非使用@Autowired(required=false)
  3. c). 若有多个bean满足依赖,Spring会抛出异常,表明没有指定使用哪个bean进行自动装配

2.1.3 处理歧义性

  1. a). 如下的实例中,当一个接口有多个实现(并都标注了@Component)时,Spring就会报NoUniqBean的错误

标识首选bean --> 某个实现上标注 @Primary

使用自定义的限定符 @Qualifier

  1. //@Component和@Autowired都标注
  2. @Component
  3. @Qualifier("cold")
  4. public class SgtPepers implements CompactDisc {}
  5. @Autowired
  6. @Qualifier("cold")
  7. private CompactDisc cd;
  8. //Java显式配置时也可使用
  9. @Bean
  10. @Qualifier("cold")
  11. public CDPlayer cdPlayer(CompactDisc cd) {
  12. return new CDPlayer(cd);
  13. }

2.1.5 示例

  1. //普通接口
  2. public interface CompactDisc {
  3. void play();
  4. }
  1. @Component // 标注为Spring组件
  2. public class SgtPepers implements CompactDisc {
  3. private String title = "Sgt. Pepers Heart Club.";
  4. private String artist = "The Beatles";
  5. @Override
  6. public void play() {
  7. System.out.println("Playing " + title + " By " + artist);
  8. }
  9. }
  1. @Configuration // 基于java的注解,标明是配置类
  2. @ComponentScan // 启用注解的组件扫描
  3. public class CDPlayerConfig {
  4. }
  1. @RunWith(SpringJUnit4ClassRunner.class) // Spring自带的测试套件
  2. @ContextConfiguration(classes = CDPlayerConfig.class) // 启用spring文件地址
  3. public class CDPlayerTest {
  4. @Autowired // 标注自动装配
  5. private CompactDisc cd;
  6. @Test
  7. public void cdShouldNotBeNull() {
  8. assertNotNull(cd);
  9. }
  10. }

2.2 用java代码显式装配-装配第三方组件

  1. a). JavaConfig不应该侵入业务代码,放在单独的包中
  2. b). @Configuration 创建启用配置类
  3. c). @Bean 标注方法即可,返回的类注入Spring容器

示例代码

  1. @Configuration // 基于java的注解
  2. public class CDPlayerConfig {
  3. @Bean // 标注的返回值注入Spring容器中,默认名称为方法名
  4. public CompactDisc sgtPepers() {
  5. return new SgtPepers();
  6. }
  7. @Bean
  8. public CDPlayer cdPlayer(CompactDisc cd) {
  9. return new CDPlayer(cd);
  10. }
  11. // @Bean //另一种方法
  12. // public CDPlayer getCdPlayer() {
  13. // return new CDPlayer(sgtPepers());
  14. // }
  15. }
  1. @RunWith(SpringJUnit4ClassRunner.class) // Spring自带的测试套件
  2. @ContextConfiguration(classes = CDPlayerConfig.class) // 启用spring文件地址
  3. public class CDPlayerTestforjava {
  4. @Autowired
  5. private CompactDisc cd;
  6. @Test
  7. public void cdShouldNotBeNull() {
  8. assertNotNull(cd);
  9. }
  10. }

2.3 xml配置-不推荐,无法类型检查

2.4 混合配置

  1. a). 自动装配时不区分bean在哪儿.

JavaConfig中引用XML配置

XML中引用JavaConfig

3. Spring AOP-基于动态代理,仅限方法拦截

3.1 AOP术语

  1. 通知(advice 切面的工作被称为通知, 通知定义了切面是什么以及何时使用。
  2. Spring定义了5中类型的通知:
  3. Before --- 在方法被调用之前调用通知。
  4. After ---- 在方法被调用之后调用通知,无论是执行成功还是失败。
  5. After-returning -- 在方法成功调用之后调用通知。
  6. After-throwing --- 在方法抛出异常后调用通知。
  7. Around --- 通知包裹了被调用的方法,在方法调用前后都执行自定义的行为。
  8. 连接点(Joinpoint)在应用过程中能够插入切面的一个点。这个点可以使调用方法时、抛出异常时、甚至修改一个字段时。切面代码可以利用这些点在正常流程中添加新的行为。
  9. 切点(Pointcut)如果通知定义了切面的“如何”和“何时”,那切点就定义了“何处”。
  10. 切点的定义会匹配通知所要织入的 一个或多个连接点。通常使用明确的类和方法名来指定这些切点,或是利用正则表达式来匹配指定类和方法名。
  11. 切面(Aspect 是通知和切点的结合。定义了关于切面的全部内容--它是什么,在何时,在何处完成其功能。

Spring核心-IOC-AOP-模版的更多相关文章

  1. Spring核心--IOC&AOP

    Ioc(控制反转) 所谓的控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的.这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转. AOP(面向切面编程) ...

  2. Spring核心框架 - AOP的原理及源码解析

    一.AOP的体系结构 如下图所示:(引自AOP联盟) 层次3语言和开发环境:基础是指待增加对象或者目标对象:切面通常包括对于基础的增加应用:配置是指AOP体系中提供的配置环境或者编织配置,通过该配置A ...

  3. Spring核心 IoC和AOP原理

    1. 什么是Spring Spring是一个轻量的Java开源框架,它简化了应用开发,实现基于POJO的编程模型.它的两大核心是:IoC(控制反转),AOP(面向切面编程). 2. IoC控制反转 简 ...

  4. Spring核心--IOC

    先说说Spring框架 Spring框架 Spring框架的作用 Spring 的核心(IOC功能) SpringAOP功能 原有的业务流程:请求->servlet-->service-- ...

  5. Spring核心框架 - AOP的起源及介绍

    一.AOP技术起源 AOP技术的诞生并不算晚,早在1990年开始,来自Xerox Palo Alto Research Lab(即PARC)的研究人员就对面向对象思想的局限性进行了分析.他们研究出了一 ...

  6. Spring Core Programming(Spring核心编程) - AOP Concepts(AOP基本概念)

    1. What is aspect-oriented programming?(什么是面向切面编程?) Aspects help to modularize cross-cutting concern ...

  7. Spring(二)--IoC&AOP

    IOC 一.IOC概述: 一般指控制反转(inversion of Control),把创建对象的权利交给框架,Ioc容器控制对象,是框架的重要特征,并非是面向对象编程的专用术语.它包括依赖注入(DI ...

  8. Spring核心框架 - AOP之动态代理机制

    动态代理类的字节码在程序运行时由Java反射机制动态生成,无需程序员手工编写它的源代码.动态代理类不仅简化了编程工作,而且提高了软件系统的可扩展性,因为Java 反射机制可以生成任意类型的动态代理类. ...

  9. spring核心之AOP学习总结二

    一:springAOP常用的注解 @Aspect:声明方面组件 @Before:声明前置通知 @After-returning:声明后置通知 @After:声明最终通知 @Around:声明环绕通知 ...

  10. spring核心之AOP学习总结一

    一:springAOP前置通知.后置通知以及最终通知 前置通知就是在切入点前面执行方面体,后置就是在后面,最终就是返回之后. 下面以一个日志记录的案例介绍: 1:创建controller类 /** * ...

随机推荐

  1. Java50道经典习题-程序35 最大最小交换

    题目:输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组.分析: 例如输入6 4 8 3 9 7 交换后输出9 4 8 7 6 3 import java.util.Arrays; ...

  2. Java50道经典习题-程序45 被9整除

    题目:判断一个素数能被几个9整除分析:素数只能被1和其本身整除,不能被9整除,所以返回false import java.util.Scanner; public class Prog45{ publ ...

  3. 整理的C#屏幕截图,控件截图程序

    代码基本从网上搜集而来,整理成以下文件: 包括屏幕截图(和屏幕上看到的一致): 以及控件截图(只要该控件在本窗口内显示完全且不被其他控件遮挡就可正确截图) using System; using Sy ...

  4. Intent要使用的ACTION都有哪些?在哪里能查到详细的ACTION呢?

    Intent操作结构之一就是ACTION,这些ACTION都有哪些?在哪里能查到详细的ACTION呢? 官方文档: https://developer.android.com/reference/an ...

  5. 图像特征提取之Haar特征

    1.Haar-like特征 Haar-like特征最早是由Papageorgiou等应用于人脸表示,Viola和Jones在此基础上,使用3种类型4种形式的特征. Haar特征分为三类:边缘特征.线性 ...

  6. 在eclipse中使用hadoop插件

    我的配置环境看我的上篇博文. 配置过程: (1)把插件放到eclipse/plugins目录下.(我的版本上一篇也有) )重启eclipse,配置Hadoop installation directo ...

  7. Django博客开发教程,Django快速开发个人blog

    学DjangoWEB框架,估计大部分的朋友都是从Blog开发开始入门的,Django中文网发布了一个Django开发教程,这个教程简单易懂,能让你快速的使用Django开发一个漂亮的个人blog,是D ...

  8. Oracle数据稠化

                姓名                      学科                分数             城市                张三           ...

  9. 模板 Trie树

    模板 Trie树 code: #include <iostream> #include <cstdio> using namespace std; const int wx=2 ...

  10. Tarjan+树形DP【洛谷P2515】[HAOI2010]软件安装

    [洛谷P2515][HAOI2010]软件安装 题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得 ...