工厂设计模式与 Annotation 整合|学习笔记

简介: 快速学习 工厂设计模式与 Annotation 整合

开发者学堂课程【Java 高级编程工厂设计模式与 Annotation 整合】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址https://developer.aliyun.com/learning/course/20/detail/398


工厂设计模式与 Annotation 整合


内容简介:


1.Annotation 操作

2.Annotation 操作特征

 

1.Annotation 操作

已经清楚 Annotation 的整体作用,但是 Annotation 到底在开发之中能做哪些事情呢?为了帮助大家进一步理解 Annotation 的处理目的,下面将结合工厂设计模式来应用 Annotation 操作。

 

1.程序代码

1)package cn. mldn. demo;

public class JavaAPIDemo {

public static void main(String[] args) throws Exception {

IMessage msg = Factory.getInstance(MessageImpl.class);

Msg.send(“www.mldn.cn”);

}

}

class Factory {

private Factory() {}

public static <T> T getInstance(Class<T> clazz) {   // 直接返回一个实例化对象

try {

return (T) new MessageProxy() .bind(clazz. getDeclaredConstructor().newInstance() );

} catch (Exception e) {

e. printstackTrace();

return null;

}

}

}

class MessageProxy implenents InvocationHandler {

private Object target ;

public Object bind(Object target) {

this.target=target ;

return Proxy . nenProxyInstance(target . getClass().getClassLoader(), target . getClass(). getInterfaces(),this); }

}

public boolean connect() {

System. out . printIn(" [代理操作]通行消息发送通道的连接。");

return true ;

}

public void close() {

System. out .printIn(" [代理操作]关闭连接通道。");

}

@Override

public object invoke(Object proxy, Method method, object[] args) throws Throwable {

try{

if (this.connect()) {

return method. invoke(this. target, args);

} else {

throw new Exception(" [ERROR]消息无法进行发送! ");

}

} finally {

this.close();

}

interface IMessage {

public void send(String msg) ;

}

class MessageImpl implements IMessage {

@Override

public void send(String msg) {

System. out. printIn(" [消息发送]”+ msg);

}

}

这个代码是基础的动态代理与 getInstance()的结合,调用了 send()方法。

代码就完成了,程序执行结果如下:

[代理操作]进行消息发送通道的连接。

[消息发送]  www. mldn. cn

[代理操作]关闭连接通道。

 

2)以上代码发挥不出操作特色,更高级的代码如下:

public class JavaAPIDemo {

public static void main(String[ ] args) throws Exception {

MessageService messageService = new MessageService() ;

messageService. send( "www. mldn.cn");

}

}

class MessageService {

private IMessage message ;

public MessageService() {

this.message = Factory . getInstance (MessageImpl.class) ;

}

public void send(String msg) {

this . message. send(msg);

}

}

执行结果如下:

[代理操作]进行消息发送通道的连接。

[消息发送] www . mldn. cn

[代理操作]关闭连接通道。

 

3)以上是一个标准的工厂与动态代理结合的形式,但也可以按下面代码操作:

@Retention(RetentionPolicy . RUNTIME)

@interface UseMessage {

public Class<?> clazz() ;

}

@UseMessage(clazz=MessageImpl.class ) // 利用Annotation实现了类的使用

class MessageService {

private IMessage message ;

public Messageservice() {

UseMessage use = Messageservice. Class. getAnnotation(UseHessage.class) ;

}

   Class<?>clazz=use.clazz();

this.message =Factory. getInstence(use.clazz()) ;  //直接通过Annotation获取

Public void send(string msg) {

This.message. send(msg);

}

}

执行结果如下:

[代理操作]进行消息发送通道的连接。

[消息发送]  Www. mldn. cn

[代理操作]关闭连接通道。

 

4)如果要想更换子类,部分程序代码如下:

class NetMessageImpl implements IMessage {

@Override

public void send(String msg) {

System. out. print1n(" [网络消息发送]”+ msg);

}

}

此时把 Annotation 更换就完成了:

@UseMessage(clazz=NetMessageImpl.class) // 利用 Annotation 实现了类的使用

程序执行结果如下:

[代理操作]进行消息发送通道的连接。

[网貉消息发送] www. mldn. cn

[代理操作]关闭连接通道。

这样就成了网络消息发送。

 

2. Annotation 操作特征

由于 Annotation 的存在,所以对于面向接口的编程的配置处理将可以直接利用Annotation 的属性完成控制,从而使得整体代码变得简洁。

相关文章
|
5月前
|
Java 编译器 开发者
Java注解(Annotation)技术深入解析
Java注解(Annotation)技术深入解析
431 1
|
设计模式 缓存 Java
Java反射(反射与代理设计模式、反射与Annotation、自定义Annotation、反射整合工厂设计模式和代理设计模式)
1.反射与代理设计模式,2.反射与Annotation,3.自定义Annotation,4.Annotation整合工厂设计模式和代理设计模式
64 0
|
安全 Java 编译器
一文带你全面深入理解Java注解Annotation
一文带你全面深入理解Java注解Annotation
255 1
一文带你全面深入理解Java注解Annotation
|
缓存 JSON Java
Java常用注解(Annotation)详解汇总
Java常用注解(Annotation)详解汇总
376 4
|
XML 安全 Java
Java核心技术之 深入理解注解(Annotation)
Java核心技术之 深入理解注解(Annotation),深入注解原理、注解场景以及使用,重新了解注解
Java核心技术之 深入理解注解(Annotation)
|
Java 编译器 测试技术
java注解annotation学习
java注解annotation学习
115 0
|
Java 编译器 Spring
Java注解(Annotation)的基本原理以及实现自定义注解
在我们使用springboot的时候我们知道因为注解的存在,使得我们的开发变得格外的方便、快捷。之前的文章Spring常用注解大全,值得你的收藏!!!对于spring中各类注解也进行过介绍。然而注解也并不是因为spring框架的兴起才出现的,而是很早就已经在java中被使用。
1179 0
Java注解(Annotation)的基本原理以及实现自定义注解
|
开发框架 Java 编译器
Java注解Annotation小结
Java注解Annotation小结
|
前端开发 安全 Java
Java注解(Annotation):请不要小看我!(1)
Java注解(Annotation):请不要小看我!
115 0
Java注解(Annotation):请不要小看我!(1)
|
设计模式 Java 开发者
工厂设计模式与 Annotation 整合|学习笔记
快速学习 工厂设计模式与 Annotation 整合
105 0