spring学习六----------Bean的配置之Aware接口
© 版权声明:本文为博主原创文章,转载请注明出处
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接口的更多相关文章
- Spring学习七----------Bean的配置之自动装配
© 版权声明:本文为博主原创文章,转载请注明出处 Bean的自动装配(Autowiring) no:不启用自动装配,此时需要手动注入.参考:Spring学习三----------注入方式 defaul ...
- Spring学习十一----------Bean的配置之基于Java的容器注解@Bean
© 版权声明:本文为博主原创文章,转载请注明出处 @Bean -@Bean标识一个用于配置和初始化一个由SpringIOC容器管理的新对象的方法,类似于XML配置文件的<bean/> -可 ...
- Spring学习十----------Bean的配置之Autowired注解实现
© 版权声明:本文为博主原创文章,转载请注明出处 @Required -@Required注解适用于bean属性的setter方法 -这个注解仅仅表示,受影响的bean属性必须在配置时被填充,通过在b ...
- Spring学习五----------Bean的配置之Bean的生命周期
© 版权声明:本文为博主原创文章,转载请注明出处 Bean的生命周期 1.定义 2.初始化 3.使用 4.销毁 初始化和销毁的三种方式 1.实现org.springframework.beans.fa ...
- Spring学习九----------Bean的配置之Bean的定义及作用域的注解实现
© 版权声明:本文为博主原创文章,转载请注明出处 Spring Bean常用注解 @Component:通常注解,可用于任何Bean @Repository:通常用于注解DAO层,即持久层 @Serv ...
- Spring学习八----------Bean的配置之Resources
© 版权声明:本文为博主原创文章,转载请注明出处 Resources 针对于资源文件的统一接口 -UrlResource:URL对应的资源,根据一个URL地址即可创建 -ClassPathResour ...
- Spring学习四----------Bean的配置之Bean的配置项及作用域
© 版权声明:本文为博主原创文章,转载请注明出处 Bean的作用域(每个作用域都是在同一个Bean容器中) 1.singleton:单例,指一个Bean容器中只存在一份(默认) 2.prototype ...
- spring 学习之 bean 的注入方式 property和constructor-arg的使用方式
spring 学习之 bean 的注入方式 property和constructor-arg的使用方式. bean的注入方式: property 注入是: 通过setxx方法注入. construct ...
- 跟着柴毛毛学Spring(3)——简化Bean的配置
通过前面的学习.我们会感觉到对于一个有较多Bean的大项目,Spring的配置会比較复杂. 那么接下来我们就介绍怎样简化Spring的配置. 简化Spring的配置主要分为两类: 1. 自己主动装配 ...
随机推荐
- vim 编辑器的使用
相信一个linux运维人员不可能不知道vim ,下面我们一起来学习vim的日常操作吧.(不要追求多,工作中用到了再去学也不迟.) 1.vim 的几种模式 *正常模式:快捷键or命令行操作 *插入模式: ...
- 【HDOJ5517】Triple(二维BIT)
题意:给你n个二元组<a,b>, m个三元组<c,d,e>. 如果d = e,那么<a,c,d>会组成一个新的三元组集合G. 问G中有多少个三元组在凸点.(没有其它 ...
- 【字符集及字符编码】UTF-8、UTF-16和UTF-32
UTF-32 用 4 个字节存储每一个字符,以保证能把 UCS 完全表达出来.但实际上 UCS 的字符数量根本不需要用 32 位表示,UTF-32 极大地浪费了空间.另外,由于组合字符的存在,定长表示 ...
- LeetCode OJ-- Interleaving String **@
https://oj.leetcode.com/problems/interleaving-string/ 刚开始用递归做,但是超时了 class Solution { public: bool fl ...
- 项目中使用libsodium扩展
前段时间研究了微信小微商户,地址:https://pay.weixin.qq.com/wiki/doc/api/xiaowei.php?chapter=19_11 其接口操作中需要下载证书针对返回的密 ...
- Codeforces Gym100814 F.Geometry (ACM International Collegiate Programming Contest, Egyptian Collegiate Programming Contest (2015) Arab Academy for Science and Technology)
这个题真的是超级超级水啊,哈哈哈哈哈哈.不要被题面吓到,emnnn,就这样... 代码: 1 #include<iostream> 2 #include<cstring> 3 ...
- openshift scc解析
SCC使用UserID,FsGroupID以及supplemental group ID和SELinux label等策略,通过校验Pod定义的ID是否在有效范围内来限制pod的权限.如果校验失败,则 ...
- 小菜的系统框架界面设计-XiaoCai.WinformUI代码开源
我的源码分享 曾经,看到别人漂亮的系统界面,合理的布局,可是却没有提供源码,道理很简单,就是有偿提供,实际上对于有些技巧的东西也并没有多么难,只是不懂原理,感觉到困难罢了. 而对于刚毕业的我,求知欲强 ...
- ios修改hosts文件后访问网址114导航域名无法解析问题
当前的问题是打开hosts文件转换成utf8格式浏览发现前面有@之类的非法字符,手动修改后可以访问.
- Centos下添加用户组
近日,重新整理了下开发环境,重装了,nginx,但是这个时候却是报错了,报错信息如下: [root@hserver1 php-7.0.5]# nginx -t nginx: [emerg] getpw ...