黑马程序员

导航

黑马程序员——java高新技术(下)

高新技术

AOP

AOP(Aspect Oriented program,简称AOP)即为面向方面的编程
·系统中存在交叉业务,一个交叉业务就是要切入到系统中的一个方面,如下所示:
{安全、事务、日志等功能要贯穿到好多个模块中,所以,它们就是交叉业务。}
  安全 事务 日志 
StudentService--|------|------|------
CourseService---|------|------|------ 
MiscService-----|------|------|------
·用具体的程序代码描述交叉业务员:
method1  method2  method3
{  {  {
-----------------------------------------切面
...  ...  ...
-----------------------------------------切面
}  }  }
·交叉业务的编程问题即为面向方面的编程(Aspect Oriented program,简称AOP),AOP的目标就是要使交叉业务模块化。可以采用将切面代码移动到原始方法的周围,这与直接在方法中编写切面代码的运行效果是一样的,如下所示:
-----------------------------------------切面
func1  func2  func3
{  {  {
...  ...  ...
}  }  }
-----------------------------------------切面
·使用代理技术正好可以解决这种问题,代理是实现AOP功能的核心和关键技术。

 

 

 

 

JavaBean

是一种特殊的Java类,主要用于传递数据信息,这种java类中的方法主要用于访问私有的字段,且方法名称符合某种命名规则。
·如果要在两个模块之间传递多个信息,可以将这些信息封装到一个JavaBean中,这种JavaBean的实例对象通常称之为值对象(Value Object,简称VO)。这些信息在类中用私有字段来存储,如果读取或设置这些字段的值,则需要通过一些相应的方法来访问,大家觉得这些方法的名称叫什么好呢?JavaBean的属性是根据其中的setter和getter方法来确定的,而不是根据其中的成员变量。如果方法名为setId,中文意思即为设置id,至于你把它存在哪个变量上,用管吗?如果方法名为getId,中文意思即为获取id,至于你从哪个变量上取,用管吗?去掉set前缀,剩余部分就是属性名,如果剩余部分的第二个字母是小写的,则把剩余部分的首字母改成小的。
 -setId()的属性名->id
 -isLast()的属性名->last
 -setCPU的属性名是什么?->CPU
 -getUPS的属性名是什么?->UPS
 总之,一个类被当做JavaBean使用时,JavaBean的属性是根据方法名推断出来的,它根本看不到java类内部的成员变量。
·一个符合JavaBean特点的类可以当做普通类一样进行使用,但把它当JavaBean用肯定需要带来一些额外的好处,我们才会去了解和应用JavaBean!好处如下:
 -在Java EE开发中,经常要使用到JavaBean。很多环境就要求按JavaBean方式进行操作,别人都这么用和要求这么做,那你就没什么挑选 的余地!
 -JDK中提供了对JavaBean进行操作的一些API,这套API就称为内省。如果要你自己去通过getX方法来访问私有的x,怎么做,有一定难度吧?用内省这套api操作JavaBean比用普通类的方式更方便。
操作技巧:重构抽取方法eclipse快捷键alt+shift+M

 

注释(采用@前缀):

位置可以在包、类、字段、方法、方法的参数以及局部变量上

@Deprecated表示不鼓励程序员使用这样的元素,通常是因为它过时或存在更好的选择。运行阶段有用。

@Override表示一个方法声明打算重写超类中的另一个方法声明。源程序阶段有用。

@SuppressWarnings指示应该在注释元素(以及包含在该注释元素中的所有程序元素)中取消显示指定的编译器警告。源程序阶段有用。

定义一个最简单的注解:public @interface MyAnnotation{}

信息的信息就是元信息;注解的注解就是元注解;

@Retention指示注释类型的注释要保留多久。其有三种取值:RetioonPolicy.SOURCE RetionPolicy.CLASS RetionPolicy.RUNTIME

@Target指示注释类型所适用的程序元素的种类。如果注释类型声明中不存在 Target 元注释,则声明的类型可以用在任一程序元素上。如果存在这样的元注释,则编译器强制实施指定的使用限制。

为注解增加高级属性:@MyAnnotation(arrayAttr={1、2、3});

@MyAnnotation(lamp = EnumTest.TrafficLamp.GREEN);

@MyAnnotation(annotationArr=@MetaAnnotation(“yyy”));

 

 

 

 

 

 

 

 

 

posted on 2012-04-15 00:22  黑马—jieqi  阅读(558)  评论(0编辑  收藏  举报