Spring中的aware接口詳情
Spring中有很多繼承于aware
中的接口,這些接口到底是做什么用到的。
aware
,翻譯過來是知道的,已感知的,意識(shí)到的,所以這些接口從字面意思應(yīng)該是能感知到所有Aware
前面的含義。
先舉個(gè)BeanNameAware
的例子,實(shí)現(xiàn)BeanNameAware
接口,可以讓該Bean
感知到自身的BeanName
(對應(yīng)Spring容器的BeanId
屬性)屬性,舉個(gè)例子:
BeanNameAware接口的定義:
public interface BeanNameAware extends Aware { void setBeanName(String name); }
定義兩個(gè)User
,一個(gè)實(shí)現(xiàn)BeanNameAware
,一個(gè)不實(shí)現(xiàn)。
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 + '\'' + '}'; } }
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配置文件中初始化兩個(gè)對象:
<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
接口所起的作用。
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("實(shí)現(xiàn)了BeanNameAware接口的信息BeanId=%s,所有信息=%s",user.getId(),user.toString())); User2 user2=context.getBean(User2.class); System.out.println(String.format("未實(shí)現(xiàn)BeanNameAware接口的信息BeanId=%s,所有信息=%s",user2.getId(),user2.toString())); }
運(yùn)行結(jié)果:
實(shí)現(xiàn)了BeanNameAware接口的信息BeanId=zhangsan,所有信息=User{id='zhangsan', name='zhangsan', address='火星'}
未實(shí)現(xiàn)BeanNameAware接口的信息BeanId=null,所有信息=User{id='null', name='lisi', address='火星'}
能夠看到,我們在實(shí)現(xiàn)了BeanNameAware
的 User
中,獲取到了Spring容器中的BeanId
(對應(yīng)spring配置文件
中的id
屬性),而沒有實(shí)現(xiàn)BeanNameAware
的User2
,則不能獲取到Spring容器中的Id屬性。
所以BeanNameAware
接口是為了讓自身Bean
能夠感知到,獲取到自身在Spring容器中的id屬性。
同理,其他的Aware
接口也是為了能夠感知到自身的一些屬性。
比如實(shí)現(xiàn)了ApplicationContextAware
接口的類,能夠獲取到ApplicationContext
,實(shí)現(xiàn)了BeanFactoryAware
接口的類,能夠獲取到BeanFactory
對象。
到此這篇關(guān)于Spring中的aware接口詳情的文章就介紹到這了,更多相關(guān)aware接口內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java字符編碼原理(動(dòng)力節(jié)點(diǎn)Java學(xué)院整理)
Java開發(fā)中,常常會(huì)遇到亂碼的問題,一旦遇到這種問題,常常比較煩惱,大家都不想承認(rèn)是自己的代碼問題,其實(shí)搞明白編碼的本質(zhì)過程就簡單多了,接下來小編給大家?guī)韏ava字符編碼原理,要求看看吧2017-04-04java四種引用及在LeakCanery中應(yīng)用詳解
這篇文章主要介紹了java四種引用及在LeakCanery中應(yīng)用,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09Java中數(shù)組的使用與注意事項(xiàng)詳解(推薦)
數(shù)組是一組地址連續(xù)、長度固定的具有相同類型的數(shù)據(jù)的集合,通過數(shù)組下標(biāo)我們可以指定數(shù)字中的每一個(gè)元素,下面這篇文章主要給大家介紹了關(guān)于Java中數(shù)組的使用與注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下2021-08-08