标签:Host spring void Object 代理 host aop public
代理模式
这是springAOP的底层
1.静态代理
2.动态代理
静态代理
角色:
1.抽象角色:一般为接口或者抽象类
javapublic interface Rent { public void rent(); }
2.真实角色:被代理
```javapackage com.zhang.demo01;
public class Host implements Rent{
public void rent(){
System.out.println("租房");
}
}
```
3.代理角色:代理真实角色,一般做一些附属工作
```java
package com.zhang.demo01;
public class Proxy {
private Host host;
public Proxy() {
}
public Host getHost() {
return host;
}
public void setHost(Host host) {
this.host = host;
}
public Proxy(Host host) {
this.host = host;
}
public void rent(){
seeHouse();
host.rent();
qianHeTong();
shouFei();
}
public void seeHouse(){
System.out.println("看房子");
}
public void shouFei(){
System.out.println("收费");
}
public void qianHeTong(){
System.out.println("签合同");
}
}
4.客户端访问
javapackage com.zhang.demo01;
public class Client {
public static void main(String[] args) {
Host host = new Host();
Proxy proxy = new Proxy(host);
proxy.rent();
}
}
```
好处:使真实角色更加简洁,公共业务分给代理,公共业务扩展时,方便集中管理
缺点:一个真实角色会有一个代理觉得,代码量翻倍
动态代理
1.动静角色一致
2.代理类为自动生成
3.动态代理分为两大类:基于接口的和基于类的
1.基于接口:jdk动态代理
2.基于类:cglib
3.Java字节码
好处:
动态代理万能模板
//自动生成代理类
public class ProxyInvocationHandler implements InvocationHandler {
//被代理的接口
private Object target;//可以修改成自己的接口
public void setTarget(Object target) {
this.target = target;
}
//生成得到道理类
public Object getProxy(){
return Proxy.newProxyInstance(this.getClass().getClassLoader(), target.getClass().getInterfaces(),this);//此处target也可以改成自己接口
}
//处理代理类,并返回结果
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//动态代理的本质就是反射
Object result = method.invoke(target, args);//此处亦然
return result;
}
}
public class Client {
public static void main(String[] args) {
//真实角色
Host host=new Host();
//代理角色
ProxyInvocationHandler phi = new ProxyInvocationHandler();
//通过调用处理程序来处理我们要调用的接口
phi.setRent(host);//设置代理对象
Rent proxy = (Rent)phi.getProxy();
proxy.rent();
}
}
实现方法。
aop
1.使用spring接口
导包:aop织入
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>1.9.4</version>
</dependency>
2.使用spring api接口
3.使用自定义类(主要是切面)
标签:Host,spring,void,Object,代理,host,aop,public 来源: https://www.cnblogs.com/cldo/p/16204251.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。