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

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

spring学习六----------Bean的配置之Aware接口的更多相关文章

  1. Spring学习七----------Bean的配置之自动装配

    © 版权声明:本文为博主原创文章,转载请注明出处 Bean的自动装配(Autowiring) no:不启用自动装配,此时需要手动注入.参考:Spring学习三----------注入方式 defaul ...

  2. Spring学习十一----------Bean的配置之基于Java的容器注解@Bean

    © 版权声明:本文为博主原创文章,转载请注明出处 @Bean -@Bean标识一个用于配置和初始化一个由SpringIOC容器管理的新对象的方法,类似于XML配置文件的<bean/> -可 ...

  3. Spring学习十----------Bean的配置之Autowired注解实现

    © 版权声明:本文为博主原创文章,转载请注明出处 @Required -@Required注解适用于bean属性的setter方法 -这个注解仅仅表示,受影响的bean属性必须在配置时被填充,通过在b ...

  4. Spring学习五----------Bean的配置之Bean的生命周期

    © 版权声明:本文为博主原创文章,转载请注明出处 Bean的生命周期 1.定义 2.初始化 3.使用 4.销毁 初始化和销毁的三种方式 1.实现org.springframework.beans.fa ...

  5. Spring学习九----------Bean的配置之Bean的定义及作用域的注解实现

    © 版权声明:本文为博主原创文章,转载请注明出处 Spring Bean常用注解 @Component:通常注解,可用于任何Bean @Repository:通常用于注解DAO层,即持久层 @Serv ...

  6. Spring学习八----------Bean的配置之Resources

    © 版权声明:本文为博主原创文章,转载请注明出处 Resources 针对于资源文件的统一接口 -UrlResource:URL对应的资源,根据一个URL地址即可创建 -ClassPathResour ...

  7. Spring学习四----------Bean的配置之Bean的配置项及作用域

    © 版权声明:本文为博主原创文章,转载请注明出处 Bean的作用域(每个作用域都是在同一个Bean容器中) 1.singleton:单例,指一个Bean容器中只存在一份(默认) 2.prototype ...

  8. spring 学习之 bean 的注入方式 property和constructor-arg的使用方式

    spring 学习之 bean 的注入方式 property和constructor-arg的使用方式. bean的注入方式: property 注入是: 通过setxx方法注入. construct ...

  9. 跟着柴毛毛学Spring(3)——简化Bean的配置

    通过前面的学习.我们会感觉到对于一个有较多Bean的大项目,Spring的配置会比較复杂. 那么接下来我们就介绍怎样简化Spring的配置. 简化Spring的配置主要分为两类: 1. 自己主动装配 ...

随机推荐

  1. PE508

    真是日了苟了我之前还以为那个递归会炸状态..我真他妈胆小啊.. = = 明确一下,这个可以构成所有高斯整数(唯一),构造方法大概就是先看曼哈顿距离,然后判断要不要减1,然后再/(1-i) 我们考虑在末 ...

  2. Chrome 浏览器访问 Google 学术出现问题 “but your computer or network may be sending automated queries. ”

    问题: Chrome 浏览器访问 Google 学术出现如下的问题 : ... but your computer or network may be sending automated querie ...

  3. pat 团体天梯赛 L3-009. 长城

    L3-009. 长城 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 邓俊辉(清华大学) 正如我们所知,中国古代长城的建造是为了抵御外 ...

  4. Shell 环境中的输入输出重定向

    Linux Shell 环境中的输入输出重定向,用符号<和>来表示.0.1和2分别表示标准输入.标准输出和标准错误. 1.重定向标准输出到文件: cat fo > foo.txt 2 ...

  5. shell特殊符号用法大全

      # 注释符号(Hashmark[Comments]) 1.在shell文件的行首,作为shebang标记,#!/bin/bash; 2. 其他地方作为注释使用,在一行中,#后面的内容并不会被执行, ...

  6. 《手把手教你学C语言》学习笔记(1)---C语言的特点

    学习C语言的原因,主要是需要使用C语言编程,我用故我学,应该是最主要的原因了. C语言的定位:C语言严格意义上只能算是中级语言,是面向过程编程语言的集大成者,虽然这种语言有很多的问题,但总体而言是瑕不 ...

  7. Caps_Locl exchang Esc

    vim ~/.Xmodmap  1 remove Lock = Caps_Lock                                          2 keysym Escape = ...

  8. hdu 4857(好题,反向拓扑排序)

    逃生 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...

  9. 【转载】NonEmpty和Non Empty的区别

    转载来源:http://www.ssas-info.com/analysis-services-articles/50-mdx/2196-mdx-non-empty-vs-nonempty One o ...

  10. python对象的复制问题,按值传递?引用传递?

    这部分这篇博文说的很明白,转了过来 作者:winterTTr (转载请注明)http://blog.csdn.net/winterttr/article/details/2590741#0-tsina ...