服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - Spring中的aware接口详情

Spring中的aware接口详情

2022-12-16 16:31一滴水的坚持 Java教程

这篇文章主要介绍了Spring中的aware接口详情,Spring中有很多继承于aware中的接口,这些接口到底是做什么用到的,下面我们就一起来看看吧,文章详细内容需要的小伙伴可以参考一下

Spring中有很多继承于aware中的接口,这些接口到底是做什么用到的。

Spring中的aware接口详情

aware,翻译过来是知道的,已感知的,意识到的,所以这些接口从字面意思应该是能感知到所有Aware前面的含义。

先举个BeanNameAware的例子,实现BeanNameAware接口,可以让该Bean感知到自身的BeanName(对应Spring容器的BeanId属性)属性,举个例子:

BeanNameAware接口的定义:

?
1
2
3
public interface BeanNameAware extends Aware {
      void setBeanName(String name);
}

定义两个User,一个实现BeanNameAware,一个不实现。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
package com.github.jettyrun.springinterface.demo.aware.beannameaware;
import org.springframework.beans.factory.BeanNameAware;
 
/**
 * Created by jetty on 18/1/31.
 */
public class User implements BeanNameAware{
 
    private String id;
 
    private String name;
 
    private String address;
 
    public void setBeanName(String beanName) {
        //ID保存BeanName的值
        id=beanName;
    }
 
    public String getId() {
        return id;
    }
 
    public void setId(String id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getAddress() {
        return address;
    }
 
    public void setAddress(String address) {
        this.address = address;
    }
 
    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
package com.github.jettyrun.springinterface.demo.aware.beannameaware;
import org.springframework.beans.factory.BeanNameAware;
 
/**
 * Created by jetty on 18/1/31.
 */
public class User2 {
 
    private String id;
 
    private String name;
 
    private String address;
 
    public String getId() {
        return id;
    }
    public void setId(String id) {
        this.id = id;
    }
 
    public String getName() {
        return name;
    }
 
    public void setName(String name) {
        this.name = name;
    }
 
    public String getAddress() {
        return address;
    }
 
    public void setAddress(String address) {
        this.address = address;
    }
 
    @Override
    public String toString() {
        return "User{" +
                "id='" + id + '\'' +
                ", name='" + name + '\'' +
                ", address='" + address + '\'' +
                '}';
    }
}

在Spring配置文件中初始化两个对象:

?
1
2
3
4
5
6
7
8
9
<bean id="zhangsan"  class="com.github.jettyrun.springinterface.demo.aware.beannameaware.User">
       <property name="name" value="zhangsan"></property>
       <property name="address" value="火星"></property>
   </bean>
 
   <bean id="lisi"  class="com.github.jettyrun.springinterface.demo.aware.beannameaware.User2">
       <property name="name" value="lisi"></property>
       <property name="address" value="火星"></property>
   </bean>
  • main方法测试一下BeanNameAware接口所起的作用。
?
1
2
3
4
5
6
7
8
9
public static void main(String[] args) {
       ApplicationContext context = new ClassPathXmlApplicationContext("classpath:application-beanaware.xml");
 
       User user=context.getBean(User.class);
       System.out.println(String.format("实现了BeanNameAware接口的信息BeanId=%s,所有信息=%s",user.getId(),user.toString()));
 
       User2 user2=context.getBean(User2.class);
       System.out.println(String.format("未实现BeanNameAware接口的信息BeanId=%s,所有信息=%s",user2.getId(),user2.toString()));
   }

运行结果:

实现了BeanNameAware接口的信息BeanId=zhangsan,所有信息=User{id='zhangsan', name='zhangsan', address='火星'}
未实现BeanNameAware接口的信息BeanId=null,所有信息=User{id='null', name='lisi', address='火星'}

能够看到,我们在实现了BeanNameAware的 User中,获取到了Spring容器中的BeanId(对应spring配置文件中的id属性),而没有实现BeanNameAwareUser2,则不能获取到Spring容器中的Id属性。

所以BeanNameAware接口是为了让自身Bean能够感知到,获取到自身在Spring容器中的id属性。

同理,其他的Aware接口也是为了能够感知到自身的一些属性。
比如实现了ApplicationContextAware接口的类,能够获取到ApplicationContext,实现了BeanFactoryAware接口的类,能够获取到BeanFactory对象。

到此这篇关于Spring中的aware接口详情的文章就介绍到这了,更多相关aware接口内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://www.jianshu.com/p/c5c61c31080b

延伸 · 阅读

精彩推荐
  • Java教程java反射之方法反射的基本操作方法

    java反射之方法反射的基本操作方法

    下面小编就为大家带来一篇java反射之方法反射的基本操作方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    Java教程网1772020-11-06
  • Java教程java 从int数组中获取最大数的方法

    java 从int数组中获取最大数的方法

    这篇文章主要介绍了java 从int数组中获取最大数的方法,需要的朋友可以参考下...

    Java之家2332020-08-16
  • Java教程Java利用cors实现跨域请求实例

    Java利用cors实现跨域请求实例

    本篇文章主要介绍了Java利用cors实现跨域请求实例,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    _小凯4652020-10-30
  • Java教程SpringBoot 集成Kaptcha实现验证码功能实例详解

    SpringBoot 集成Kaptcha实现验证码功能实例详解

    在一个web应用中验证码是一个常见的元素。今天给大家介绍一下kaptcha的和springboot一起使用的简单例子。感兴趣的朋友参考下吧...

    也是右移6462020-12-17
  • Java教程SpringBoot 进行限流的操作方法

    SpringBoot 进行限流的操作方法

    限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机。本文重点给大家介绍SpringBoot 进...

    飘渺Jam10422022-02-16
  • Java教程Java中的static的使用指南

    Java中的static的使用指南

    本文给大家简单总结了下java中的static的使用注意事项及方法,非常的实用,有需要的小伙伴可以参考下 ...

    神话丿小王子1972020-04-19
  • Java教程Java经典面试题汇总:Java Web

    Java经典面试题汇总:Java Web

    本篇总结的是Java Web相关的面试题,后续会持续更新,希望我的分享可以帮助到正在备战面试的实习生或者已经工作的同行,如果发现错误还望大家多多包...

    让程序飞6192021-10-18
  • Java教程SpringCloud Stream使用解析

    SpringCloud Stream使用解析

    这篇文章主要介绍了SpringCloud Stream介绍,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...

    键盘歌唱家9252021-08-31