如果监视一个对象的属性变化,并触发一段代码

问题描述

Hi问题是关于如何监视一个对象的属性状态变化就好比在 ServletContextAttributeListener 一样当 ServletContext 属性发生变化时,会触发一段 代码的执行我想明白的就是 如果做,才能 监视自己写的对象,并在其 指定属性发生变化时,出发一段代码呢?请各位赐教下,小弟在此感激不尽

解决方案

监控属性变化,可以使用Observer模式,Java本身提供对这种模式的支持,你按下面的例子看一下:///你需要临视的Beanpackage com.test;import java.util.Observable;public class Product extends Observable{ private String name; public String getName() {return name;}public void setName(String name) {this.name = name; ///下面两段代码用于监控setChanged();notifyObservers(name);}}///监控者package com.test;import java.util.Observable;import java.util.Observer;public class NameObserver implements Observer{private String name=null;public void update(Observable obj, Object arg) {if(arg instanceof String){ name=(String)arg; System.out.println("名字有变化");}} ///main用于测试 public static void main(String[] str){ NameObserver nameObserver=new NameObserver(); Product product=new Product(); product.addObserver(nameObserver); // product.setName("ccc"); }}当然了你还可以使用代理或spring aop的切面编程来做
解决方案二:
81261686 已经把可能都给你说了,其实这些东西的实质是什么。我想你也明白,我们就拿生活的举例来说吧。当我们想去用网捕鱼的时候,我们要先把网放到那里,当鱼游过的时候我们要去提网。这个过程中,人一直是在监听的状态,也就是说当鱼到网的时候,它不会主动告诉你它来了。因此我们要做监听的话,我们就需要投入的东西很多。一种办法就是观察者模式,虽然我现在还不明白其中的原理,但是感觉这些都不离不开反射的机制。。。
解决方案三:
使用代理模式,可参考hibernate对于脏对象检测的方法,具体说就是生成一个你要监控的对象的子类,子类的方法统统委托给父类来做,然后再方法里面加入你自己的监控代码就可以了。

时间: 2024-09-20 07:39:33

如果监视一个对象的属性变化,并触发一段代码的相关文章

java对象转化-java中一个对象的属性可以有多少种

问题描述 java中一个对象的属性可以有多少种 java中一个对象的属性可以有多少种一个方法算是一个对象的行为,那么也就是它的对象了,是可以有无数种,还是有限制呢 解决方案 在程序代码中是没有限制,只能说性能还有需求 解决方案二: 在程序代码中是没有限制,只能说性能还有需求 解决方案三: 对象的属性没有限制

使用C#实现五行号码属性变化的万年历

五行是指"金木水火土",我国古代认为,宇宙是由金.木.水.火.土五种元素构成的,五行运动即相生相克的结果构成了大千世界.五行有正五行和纳音五行之分. 按天干地支的自身属性所定的五行为正五行,甲木.子水等: (十大天干和十二地支,十天干:甲.乙.丙.丁.戊.己.庚.辛.壬.癸:十二地支:子.丑.寅.卯.辰.巳.午.未.申.酉.戌.亥: 天干地支纪年法首先是天干在前,地支在后,比如今年2005就为-乙酉年) 按干支结合生出的五行为纳音五行.纳音来源:六十甲子纳音,实即六十律逆相为宫之法.一

jqGrid随窗口大小变化自适应大小的示例代码

 本篇文章主要是对jqGrid随窗口大小变化自适应大小的示例代码进行了详细的介绍,需要的朋友可以过来参考下,希望对大家有所帮助 第一种:    jqGrid随窗口大小变化自适应宽度   代码如下: $(function(){             $(window).resize(function(){             $("#listId").setGridWidth($(window).width());         });        });    第二种:  代

struts2-这段代码的错误在哪里,id属性的值为空,但是控制台能输出所有的value值,求大神解答??

问题描述 这段代码的错误在哪里,id属性的值为空,但是控制台能输出所有的value值,求大神解答?? <s:form action=""deleteMessageAction"" method=""post""> <table align=""center"" width=""40%"" border=""5&

方法-c#2010里怎么设置一段代码的属性??新人求解

问题描述 c#2010里怎么设置一段代码的属性??新人求解 这是我在网上找的用C写坦克大站的一段代码,教程视频里作者在 p1Tank上按了不知道什么键然后弹出一个窗口确认后就出现了下面这几行代码,我却找不到方法. private P1Tank p1Tank; public P1Tank P1Tank { get { return p1Tank; } set { p1Tank = value; } } 解决方案 这个是封装 pubice p1Tank p1tank: 选中后面的p1tank然后右键

jQuery实现响应鼠标背景变化的动态菜单效果代码_jquery

本文实例讲述了jQuery实现响应鼠标背景变化的动态菜单效果代码.分享给大家供大家参考.具体如下: 这是一款jQuery响应鼠标背景变化的动态菜单,菜单的背景在鼠标放上后有所变化,这款菜单的实现主要是使用了图片,修改菜单的时候要修改图片,有些麻烦,不过效果不错,引入的jquery插件是1.7版本,高版本jQuery未测试,应该也可以啦. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/jquery-mouse-cha-bg-pic-menu-co

html-为什么在IE中运行这段代码会提示type为空或不是对象?为什么border属性会无法移除?

问题描述 为什么在IE中运行这段代码会提示type为空或不是对象?为什么border属性会无法移除? <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>example</title> <style type="text/css"> p{ border: thin solid black; background: g

打开,另存为,属性,打印&quot;等14个JS代码

隐去浏览器中当鼠标移到图片上跳出的工具栏 <img galleryimg="no"> 或者 <head> <meta http-equiv="imagetoolbar" content="no"> </head> 打开,另存为,属性,打印"等14个JS代码 ■打开■ <input name=Button onClick=document.all.WebBrowser.ExecWB(1

JS实现自动变化的导航菜单效果代码_javascript技巧

本文实例讲述了JS实现自动变化的导航菜单效果代码.分享给大家供大家参考.具体如下: 自动变化的JS导航菜单,按照时间自动切换,有需要的参考一下. 运行效果截图如下: 在线演示地址如下: http://demo.jb51.net/js/2015/js-auto-cha-nav-menu-style-codes/ 具体代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://ww