代理类
『壹』 sap生成代理类报错: 未知类型参考,是什么原因
在SAP中,某些业务对象会有状态的属性,用来控制和约束该业务当前的操作。
比如PM模块的工单和PS模块的项目定义,状态这个属性并不存放在各个业务的业务表中,而是由SAP统一管理。
【系统状态】
以I开头,主数据表是TJ02,描述表TJ02T
表TJ04可以据业务对象号(如WBS是PRN),可以查出所有相关的状态
【用户状态】
以E开头,每个用户状态都关联一个用户参数文件,相同的状态编码在不用的参数文件下意义不用,
主数据表为TJ30, 文本表是TJ30T
对于每笔业务,都有一个唯一的对象编号,字段名一般为OBJNR,存在在业务表中(AUFK, PROJ...)
JEST:存放了该对象编号的当前状态
JCDS:存在对象状态修改的历史记录
Function mole: STATUS_READ 读出某个业务对象的当前状态(注意包括业务进行中BUFFER的状态)
STATUS_UPDATE 修改状态(批量新增或者修改状态)
I_CHANGE_STATUS 状态更新(取消一个当前状态,激活一个新的状态)
补充一点,还有一个取项目的状态描述的FUNCTION是:STATUS_TEXT_EDIT在【ABAP】项目相关开发中的一些经验总结里有详细的用法介绍。
『贰』 数据库中代理类怎么到实现类
$.ajax({
type:'POST',url:'submitcomment.php',timeout:2000,cache:true,
data:'dataid='+dataid+'&appid='+appid+'&name='+name.val()+'&txt='+txt.val()+'&openid='+openid,
error:function(msg){return false},
success:function(json, st){
if(json.result == 0){
alert('您的评论审核通过后,才会显示出来!');
}else{ //否则审核通过,显示出来
$("#comlistx0014jwh62k").html(json);
『叁』 如何获得Java动态代理的代理类
AOP的拦截功能是由java中的动态代理来实现的。说白了,就是在目标类的基础上增加切面逻辑,生成增强的目标类(该切面逻辑或者在目标类函数执行之前,或者目标类函数执行之后,或者在目标类函数抛出异常时候执行。不同的切入时机对应不同的Interceptor的种类,如BeforeAdviseInterceptor,AfterAdviseInterceptor以及ThrowsAdviseInterceptor等)。
那么动态代理是如何实现将切面逻辑(advise)织入到目标类方法中去的呢?下面我们就来详细介绍并实现AOP中用到的两种动态代理。
AOP的源码中用到了两种动态代理来实现拦截切入功能:jdk动态代理和cglib动态代理。两种方法同时存在,各有优劣。jdk动态代理是由Java内部的反射机制来实现的,cglib动态代理底层则是借助asm来实现的。总的来说,反射机制在生成类的过程中比较高效,而asm在生成类之后的相关执行过程中比较高效(可以通过将asm生成的类进行缓存,这样解决asm生成类过程低效问题)。还有一点必须注意:jdk动态代理的应用前提,必须是目标类基于统一的接口。如果没有上述前提,jdk动态代理不能应用。由此可以看出,jdk动态代理有一定的局限性,cglib这种第三方类库实现的动态代理应用更加广泛,且在效率上更有优势。。
1、定义接口和实现
[java] view plain print?
package com.meituan.hyt.test3.service;
public interface UserService {
public String getName(int id);
public Integer getAge(int id);
}
[java] view plain print?
package com.meituan.hyt.test3.service.impl;
import com.meituan.hyt.test3.service.UserService;
public class UserServiceImpl implements UserService {
@Override
public String getName(int id) {
System.out.println("------getName------");
return "Tom";
}
@Override
public Integer getAge(int id) {
System.out.println("------getAge------");
return 10;
}
}
2、jdk动态代理实现
[java] view plain print?
package com.meituan.hyt.test3.jdk;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
public class MyInvocationHandler implements InvocationHandler {
private Object target;
MyInvocationHandler() {
super();
}
MyInvocationHandler(Object target) {
super();
this.target = target;
}
@Override
public Object invoke(Object o, Method method, Object[] args) throws Throwable {
if("getName".equals(method.getName())){
System.out.println("++++++before " + method.getName() + "++++++");
Object result = method.invoke(target, args);
System.out.println("++++++after " + method.getName() + "++++++");
return result;
}else{
Object result = method.invoke(target, args);
return result;
}
}
}
[java] view plain print?
package com.meituan.hyt.test3.jdk;
import com.meituan.hyt.test3.service.UserService;
import com.meituan.hyt.test3.service.impl.UserServiceImpl;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
public class Main1 {
public static void main(String[] args) {
UserService userService = new UserServiceImpl();
InvocationHandler invocationHandler = new MyInvocationHandler(userService);
UserService userServiceProxy = (UserService)Proxy.newProxyInstance(userService.getClass().getClassLoader(),
userService.getClass().getInterfaces(), invocationHandler);
System.out.println(userServiceProxy.getName(1));
System.out.println(userServiceProxy.getAge(1));
}
}
运行结果
++++++before getName++++++
------getName------
++++++after getName++++++
Tom
------getAge------
10
3、cglib动态代理实现
Cglib是一个优秀的动态代理框架,它的底层使用ASM在内存中动态的生成被代理类的子类,使用CGLIB即使代理类没有实现任何接口也可以实现动态代理功能。CGLIB具有简单易用,它的运行速度要远远快于JDK的Proxy动态代理:
CGLIB的核心类:
net.sf.cglib.proxy.Enhancer – 主要的增强类
net.sf.cglib.proxy.MethodInterceptor – 主要的方法拦截类,它是Callback接口的子接口,需要用户实现
net.sf.cglib.proxy.MethodProxy – JDK的java.lang.reflect.Method类的代理类,可以方便的实现对源对象方法的调用,如使用:
Object o = methodProxy.invokeSuper(proxy, args);//虽然第一个参数是被代理对象,也不会出现死循环的问题。
net.sf.cglib.proxy.MethodInterceptor接口是最通用的回调(callback)类型,它经常被基于代理的AOP用来实现拦截(intercept)方法的调用。这个接口只定义了一个方法
public Object intercept(Object object, java.lang.reflect.Method method,
Object[] args, MethodProxy proxy) throws Throwable;
第一个参数是代理对像,第二和第三个参数分别是拦截的方法和方法的参数。原来的方法可能通过使用java.lang.reflect.Method对象的一般反射调用,或者使用 net.sf.cglib.proxy.MethodProxy对象调用。net.sf.cglib.proxy.MethodProxy通常被首选使用,因为它更快。
[java] view plain print?
package com.meituan.hyt.test3.cglib;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;
public class CglibProxy implements MethodInterceptor {
@Override
public Object intercept(Object o, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {
System.out.println("++++++before " + methodProxy.getSuperName() + "++++++");
System.out.println(method.getName());
Object o1 = methodProxy.invokeSuper(o, args);
System.out.println("++++++before " + methodProxy.getSuperName() + "++++++");
return o1;
}
}
[java] view plain print?
package com.meituan.hyt.test3.cglib;
import com.meituan.hyt.test3.service.UserService;
import com.meituan.hyt.test3.service.impl.UserServiceImpl;
import net.sf.cglib.proxy.Enhancer;
public class Main2 {
public static void main(String[] args) {
CglibProxy cglibProxy = new CglibProxy();
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(UserServiceImpl.class);
enhancer.setCallback(cglibProxy);
UserService o = (UserService)enhancer.create();
o.getName(1);
o.getAge(1);
}
}
运行结果:
++++++before CGLIB$getName$0++++++
getName
------getName------
++++++before CGLIB$getName$0++++++
++++++before CGLIB$getAge$1++++++
getAge
------getAge------
++++++before CGLIB$getAge$1++++++
『肆』 微商,代理之类的真那么挣钱么
哥们
我做微商两年了
很辛苦的
说白了就是刷图刷高大上的描述
为的是吸引眼球
你自己从上家拿货200百
卖多少钱那是你的本事
很辛苦
『伍』 什么是制造类、代理类、集成类供应商
顾名思义——所谓制造类供应商是指销售自己生产制造的产品的供应商;内代理类供应商是指以代理容的名义销售其他非自己生产制造的商品的供应商;集成类供应商则是指既销售自己生产制造的商品,同时也代理销售其他生产商生产制造的产品的供应商。
『陆』 “代理类跟被代理类实现同一个接口,然后我再调用代理类的方法的时候就不知道调用谁的方法,屏蔽细节”
问题:“代理类跟被代理类实现同一个接口,然后我再调用代理类的方法的时候就不知道调用谁的方法,屏蔽细节”。
回答:这句话的意思是说:代理类代替真实类(也就是这里的被代理类)履行职责,而你根本就不知道这个代理类代替的谁,也就是真实类被屏蔽了,方法的真实实现也被屏蔽了。
『柒』 什么是spring代理类
代理就是帮助去做一件事 生活中你应该听过代理人 吧, 和Java中的代理含义是一样的。
比方说 你要记录日志, 在常规开发中,日志的记录 不属于业务的一部分。 但是我们又希望记录业务日志 第一个我们想到的就是 在业务层写日志,理论上是没问题的,实际也没问题。但是却产生了麻烦
如果后期维护的时候,别人看代码的时候就会找不到那句是业务,那句是日志,造成维护麻烦。这只是其中一点 而Java有2个很重要的特性, 各司其职和独立性 ,这就要求了 日志 和业务,应该分别处理,而不应该混淆在一起。 于是就有人提出了代理的概念, 代替业务操作类去在操作的业务的时候去记录日志 。
『捌』 java中的代理类一般在什么时候使用呢
1.代理模式
代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个客户不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
代理模式一般涉及到的角色有:
抽象角色 :声明真实对象和代理对象的共同接口;
代理角色 :代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。
真实角色 :代理角色所代表的真实对象,是我们最终要引用的对象。
代理模式使用原因和应用方面
(1)授权机制 不同级别的用户对同一对象拥有不同的访问权利,如Jive论坛系统中,就使用Proxy进行授权机制控制,访问论坛有两种人:注册用户和游客(未注册用户),Jive中就通过类似ForumProxy这样的代理来控制这两种用户对论坛的访问权限.
(2)某个客户端不能直接操作到某个对象,但又必须和那个对象有所互动.
举例两个具体情况:
如果那个对象是一个是很大的图片,需要花费很长时间才能显示出来,那么当这个图片包含在文档中时,使用编辑器或浏览器打开这个文档,打开文档必须很迅速,不能等待大图片处理完成,这时需要做个图片Proxy来代替真正的图片.
如果那个对象在Internet的某个远端服务器上,直接操作这个对象因为网络速度原因可能比较慢,那我们可以先用Proxy来代替那个对象.
总之原则是,对于开销很大的对象,只有在使用它时才创建,这个原则可以为我们节省很多宝贵的Java内存. 所以,有些人认为Java耗费资源内存,我以为这和程序编制思路也有一定的关系.
(3)现实中,Proxy应用范围很广,现在流行的分布计算方式RMI和Corba等都是Proxy模式的应用
『玖』 请问用什么代理类型
如果选择开淘宝肯定是不行了,淘宝自从2003年成立到现在已经有10多年的时间,而且截止现在开店的有上千万卖家,在这样竞争激烈的环境下是很难赚到钱的,不过可以尝试一下第三代连锁网店,不需要进货和发货,可以拓展分店,分店卖出商品也可以有钱赚,或许可以适合你