© 版权声明:本文为博主原创文章,转载请注明出处

Aware

Spring提供了一些以Aware结尾的接口,实现了Aware接口的bean在被初始化后,可以获取相应的资源

通过Aware接口,可以对Spring相应资源进行操作

为Spring进行简单的扩展提供了方便的入口

本博客只对ApplicationContextAware和BeanNameAware进行测试

1.项目结构

2.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/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.springbean</groupId>
<artifactId>SpringBean</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>
<name>SpringBean Maven Webapp</name>
<url>http://maven.apache.org</url> <properties>
<!-- 版本统一 -->
<spring.version>4.3.7.RELEASE</spring.version>
</properties> <dependencies>
<!-- junit依赖 -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</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>
</dependencies> <build>
<finalName>SpringBean</finalName>
</build>
</project>

3.TestBase.java

package org.spring.aware.test;

import org.junit.After;
import org.junit.Before;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.util.StringUtils; /**
* 单元测试基类
*
*/
public class TestBase { private ClassPathXmlApplicationContext context;
private String springXmlPath; /**
* 无参构造器,若无此构造器则必须传入spring配置文件的路径,有此构造器可以设置默认值
*/
public TestBase() { } /**
* 含参构造器,初始化spring配置文件的位置
*
* @param springXmlPath
*/
public TestBase(String springXmlPath) { this.springXmlPath = springXmlPath; } /**
* 初始化加载spring配置文件,在@Test注解的方法执行之前执行
*/
@Before
public void begin() { if(StringUtils.isEmpty(springXmlPath)) {//使用默认的spring配置文件
springXmlPath = "classpath:spring-*.xml";
}
//加载配置文件至spring容器中
context = new ClassPathXmlApplicationContext(springXmlPath.split("[,\\s]+"));
//启动容器并将启动信号扩散至该容器中的所有组件
context.start(); } /**
* 销毁spring容器,在@Test注解的方法执行之后执行
*/
@After
public void destroy() { context.destroy(); } /**
* 根据beanID获取bean对象
*
* @param beanId
* beanId
* @return
*/
public Object getBean(String beanId) { return context.getBean(beanId); } }

4.MyApplicationContext.java

package org.spring.aware;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware; public class MyApplicationContext implements ApplicationContextAware { public void setApplicationContext(ApplicationContext context) throws BeansException { System.out.println("MyApplicationContext:" + context.getBean("myApplicationContext")); } }

5.MyBeanName.java

package org.spring.aware;

import org.springframework.beans.factory.BeanNameAware;

public class MyBeanName implements BeanNameAware {

	public void setBeanName(String name) {

		System.out.println("MyBeanName:" + name);

	}

}

6.spring-aware.xml

  6.1 继承ApplicationContextAware接口

<?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"> <bean id="myApplicationContext" class="org.spring.aware.MyApplicationContext"/> </beans>

  6.2 继承BeanNameAware接口

<?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"> <bean id="myBeanName" class="org.spring.aware.MyBeanName"/> </beans>

7.TestSpringAware.java

package org.spring.aware.test;

import org.junit.Test;

public class TestSpringAware extends TestBase {

	/**
* 通过构造器传入spring配置文件路径
*/
public TestSpringAware() { super("classpath:spring-aware.xml"); } @Test
public void testApplicationContext() { System.out.println("testApplicationContext:" + super.getBean("myApplicationContext")); } @Test
public void testBeanName() { System.out.println("testBeanName:" + super.getBean("myBeanName")); } }

8.效果预览

  8.1 执行testApplicationContext方法

  8.2 执行testBeanName方法

同时继承ApplicationContextAware和BeanNameAware两个接口

1.MyAware.java

package org.spring.aware;

import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware; public class MyAware implements ApplicationContextAware, BeanNameAware { private String name; public void setBeanName(String name) { this.name = name; } public void setApplicationContext(ApplicationContext context) throws BeansException { System.out.println("MyAware:" + context.getBean(name)); } }

2.spring-aware.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"> <bean id="myAware" class="org.spring.aware.MyAware"/> </beans>

3.TestSpringAware.java

package org.spring.aware.test;

import org.junit.Test;

public class TestSpringAware extends TestBase {

	/**
* 通过构造器传入spring配置文件路径
*/
public TestSpringAware() { super("classpath:spring-aware.xml"); } @Test
public void testApplicationContext() { System.out.println("testApplicationContext:" + super.getBean("myApplicationContext")); } @Test
public void testBeanName() { System.out.println("testBeanName:" + super.getBean("myBeanName")); } @Test
public void testAware() { System.out.println("testAware:" + super.getBean("myAware")); } }

4.效果预览

  4.1 执行testAware方法

参考:http://www.imooc.com/video/3755

最新文章

  1. 李洪强iOS经典面试题156 - Runtime详解(面试必备)
  2. Windows 8 下离线安装。net Framework 3.5
  3. AngularJS 学习之事件
  4. C# Lock 解读[转]
  5. leetcode(144,94,145,102)中迭代版的二叉树的前、中、后、层级遍历
  6. mongodb下载、安装、配置服务启动、及可视化工具下载、使用
  7. LightSpeed 之Sql和存储过程的使用
  8. 策略模式c++【转】
  9. JAVA基础知识之Map集合
  10. JavaScript中Date的一些细节
  11. [转]对Android开发者有益的40条优化建议
  12. iOS开发——UI篇Swift篇&amp;UITextView
  13. 【大数处理、正则表达式】NYOJ-513
  14. bzoj 4448 [Scoi2015]情报传递(主席树,LCA)
  15. [FJSC2014]异或之
  16. ORACLE触发器的管理与实际应用【weber出品】
  17. Week 5a - Mouse input and more lists ----mouse input
  18. Android 按下电源按钮关闭小学习过程的整个长度
  19. jQuery kxbdMarquee 无缝滚动
  20. DirectX11 With Windows SDK--06 DirectXMath数学库

热门文章

  1. ffmpeg nmb
  2. docker 集群 kubernetes 1.8 构建
  3. URL短网址生成算法原理和php实现案例
  4. 【HDOJ1828&amp;&amp;POJ1177】Picture(线段树,扫描线)
  5. 《Linux命令行与shell脚本编程大全 第3版》Linux命令行---17
  6. 深入代码详谈irqbalance【转】
  7. JSON Web Token的使用
  8. POJ 3710 Christmas Game [博弈]
  9. 【ActiveMQ】1.下载安装启动使用
  10. EasyMvc入门教程-高级控件说明(17)对话框控件