我想摆脱模型类中占用空间和重复性的RaisePropertyChanged-Properties.我想要我的模特课......
public class ProductWorkItem : NotificationObject
{
private string name;
public string Name
{
get { return name; }
set {
if (value == name) return;
name = value; RaisePropertyChanged(() => Name);
}
}
private string description;
public string Description
{
get { return description; }
set {
if (value == description) return;
description = value; RaisePropertyChanged(() => Description);
}
}
private string brand;
public string Brand
{
get { return brand; }
set {
if (value == brand) return; …Run Code Online (Sandbox Code Playgroud) 部署在Weblogic Cluster上的我的Java应用程序调用两个Web服务,如下所示.
•它通过HTTPS将SOAP客户端请求发送到Internet上的外部应用程序.(通过Axis 1.4创建的Java类)
•此后它通过HTTP将SOAP客户端请求发送到内部应用程序(存在于连接到我的LAN的另一个节点上).(通过JAX-WS创建的Java类:Jdeveloper向导)
为了达到第一个WS,我必须使用以下代码为Web服务客户端设置https代理设置:
System.setProperty("https.proxyHost", myProxyIP);
System.setProperty("https.proxyPort", myProxyPort);
Run Code Online (Sandbox Code Playgroud)
而第二个Web服务不需要此代理设置,因为它们已在网络上可访问.
我的问题如下:
如果我调用第一个服务(具有代理设置的服务),然后调用另一个服务,则Axis客户端尝试使用相同的代理设置调用这些服务,即使我在我之前从系统属性中删除了代理设置即将通过写作来介绍2ns WS
System.setProperty("http.proxySet", "false");
System.getProperties().remove("http.proxyHost");
System.getProperties().remove("http.proxyPort");
AxisProperties.setProperty("http.proxyHost", null);
AxisProperties.setProperty("http.proxyPort", null);
Run Code Online (Sandbox Code Playgroud)
我读somwhere使用nonProxyHosts.But我很困惑,如果我应该写
System.setProperty("https.nonProxyHosts","secws.secondwsint.com");
Run Code Online (Sandbox Code Playgroud)
要么
System.setProperty("http.nonProxyHosts","secws.secondwsint.com");
Run Code Online (Sandbox Code Playgroud)
http ot https,因为需要绕过的是HTTP,而我们设置代理的是HTTPS.
我也读过一篇博客:
AxisProperties.setProperty("https.proxyHost", "bla1.bla1");
AxisProperties.setProperty("https.proxyPort", "8080");
AxisProperties.setProperty("https.nonProxyHosts", "secws.secondwsint.com");
Run Code Online (Sandbox Code Playgroud)
但再一次让天使用https.nonProxyHosts或http.nonProxyHosts
哪一个在我的java程序中使用是可取的,System.setProperty或者更AxisProperties.setProperty重要的是我应该使用http ot https来编写该代码行此外,还有其他选择吗?
这是Kotlin等效的Java代码,使用InvocationHandler:
override fun invoke(proxy: Any?, method: Method?, args: Array<out Any>?): Any {
println("before httprequest--->" + args)
val ret = method!!.invoke(obj, args)
println("after httprequest--->")
return ret
}
Run Code Online (Sandbox Code Playgroud)
Java代码:
public Object invoke(Object o, Method method, Object[] args) throws Throwable {
System.out.println("jdk--------->http" + args);
Object result=method.invoke(target, args);
System.out.println("jdk--------->http");
return result;
}
Run Code Online (Sandbox Code Playgroud)
在这两种情况下args都是null,但是如果我运行它,Kotlin代码就会给出异常
Exception in thread "main" java.lang.IllegalArgumentException: wrong number of arguments
Run Code Online (Sandbox Code Playgroud)
Kotlin使用标准Java类的原因是什么?
我有一个类LabelMapper(一个boost::python类),它实现了字典协议.我想有一个代理类,它将使用属性来访问该dicionary.我已经看过许多重写的帖子__setitem__,__getitem__但我似乎无法做到正确.
天真的方法(下面)导致无限递归,因为self.mapper调用LabelMapperProxy.__getattr__,反过来需要self.mapper等等.
class LabelMapper(object):
def __init__(self): self.map={}
def __getitem__(self,key): return self.map[key]
def __setitem__(self,key,val): self.map[key]=val
def __delitem__(self,key): del self.map[key]
class LabelMapperProxy(object):
def __init__(self,mapper): self.mapper=mapper
def __getattr__(self,key): return self.mapper[key]
def __setattr__(self,key,val): self.mapper[key]=val
def __delattr__(self,key): del self.mapper[key]
lm=LabelMapper()
lm['foo']=123
# construct the proxy
lmp=LabelMapperProxy(mapper=lm)
print lmp.foo # !!! recursion
lmp.bar=456
print lmp.bar,lm['bar']
Run Code Online (Sandbox Code Playgroud)
解决办法是什么?也许在标准库中预先煮好这样的代理?
我找不到为什么每个自动装配的bean都没有被代理自动装配的原因.我知道因为@Transactional注释不起作用,我在eclipse调试期间检查了自动装配的组件.当然,每个组件都实现了一些接口,我使用@Autowired与接口相关的注释.我只有一个aop配置:
<tx:annotation-driven transaction-manager="transactionManager" />
Run Code Online (Sandbox Code Playgroud)
我使用JPA与hibernate,spring-mvc,spring-webflow,spring-security和spring-data.扩展的接口org.springframework.data.repository.CrudRepository由代理自动装配.但我的组件不是.例如,我有类MyClass实现MyInterface:
@Service
public class MyClass implements MyInterface {
@Autowired
MyCrudReposiotry reposiotry;
....
}
Run Code Online (Sandbox Code Playgroud)
如果我在某处自动装配MyInterface:
@Autowired
MyInterface mi;
Run Code Online (Sandbox Code Playgroud)
然后mi只是MyClass对象的引用,存储库是对代理的引用org.springframework.aop.framework.JdkDynamicAopProxy.非常有趣的是,在测试中mi是对代理的引用.我的测试上下文不包含web-flow和mvc配置.
也许有一些间接的aop配置我应该检查.什么可以通过代理关闭自动装配?
我需要一些薄的包装器对象来标记字典键,例如:
d = {
Required('name'): str,
Optional('age'): int,
}
Run Code Online (Sandbox Code Playgroud)
这些包装器应该像包装对象一样(比较,散列等):
marked = Required('name')
marked == 'name' #-> True
d[marked] = 'hello'
d['name'] #-> 'hello'
Run Code Online (Sandbox Code Playgroud)
使用一个额外的属性:它应该记住添加的类:
isinstance(marked, Required) #-> True
Run Code Online (Sandbox Code Playgroud)
添加的类应该有自定义方法.
这实际上就像是可混合物体上的混合物.
我不喜欢那些模仿所有特殊属性并考虑以下想法的重量级代理模式:
class Wrapper(object):
def __new__(cls, value):
value_type = type(value)
Type = type(
value_type.__name__, # same name
(cls, value_type), # Wrapper + bases
{})
Type.__new__ = value_type.__new__ # prevent recursion
return Type(value)
# Override method
def __repr__(self):
return 'Wrapper({})'.format(self)
Run Code Online (Sandbox Code Playgroud)
好主意?
代码在这里
package main
import "fmt"
func main() {
t16()
}
type Base struct {
val int
}
func (b *Base)Set(i int) {
b.val = i
}
type Sub struct {
Base
changed bool
}
func (b *Sub)Set(i int) {
b.val = i
b.changed = true
}
func t16() {
s := &Sub{}
s.Base.Set(1)
var b *Base = &s.Base
fmt.Printf("%+v\n", b)
fmt.Printf("%+v\n", s)
}
Run Code Online (Sandbox Code Playgroud)
我想让Sub充当Base,但是当我调用Set时,对于Sub它会标记更改.我知道golang中没有多态或代理,但有没有办法做到这一点,而不影响Base?
更新
我希望当我调用Base.Set它将标记更改,对于用户,他们不知道他们实际上使用Sub,所以我可以监视Base行为.
func t16() {
s := &Sub{}
var b *Base = &s.Base
b.Set(10)
fmt.Printf("%+v\n", …Run Code Online (Sandbox Code Playgroud) 我需要在我正在构建的Web应用程序中实现一个简单的PHP代理(基于Flash并且目标服务提供程序不允许编辑其crossdomain.xml文件)
任何php专家可以提供以下2个选项的建议吗?此外,我认为,但我不确定,我还需要包含一些标题信息.
感谢您的任何反馈!
选项1
$url = $_GET['path'];
readfile($path);
Run Code Online (Sandbox Code Playgroud)
选项2
$content .= file_get_contents($_GET['path']);
if ($content !== false)
{
echo($content);
}
else
{
// there was an error
}
Run Code Online (Sandbox Code Playgroud) 我正在解决蟒蛇的问题.直到第34天我才有任何实际问题.
这就是问题:
项目:创建代理类
在此分配中,创建一个代理类(下面将为您启动一个代理类).您应该能够使用任何对象初始化代理对象.应将代理对象上调用的任何属性转发到目标对象.在发送每个属性调用时,代理应记录发送的属性的名称.
代理类是为您启动的.您将需要添加方法缺少处理程序和任何其他支持方法.Proxy类的规范在AboutProxyObjectProject koan中给出.
注意:这有点棘手,它是Ruby Koans的对应物,但你可以做到!
这是我的解决方案,直到现在:
class Proxy(object):
def __init__(self, target_object):
self._count = {}
#initialize '_obj' attribute last. Trust me on this!
self._obj = target_object
def __setattr__(self, name, value):pass
def __getattr__(self, attr):
if attr in self._count:
self._count[attr]+=1
else:
self._count[attr]=1
return getattr(self._obj, attr)
def messages(self):
return self._count.keys()
def was_called(self, attr):
if attr in self._count:
return True
else: False
def number_of_times_called(self, attr):
if attr in self._count:
return self._count[attr]
else: return False
Run Code Online (Sandbox Code Playgroud)
它适用于此测试:
def test_proxy_records_messages_sent_to_tv(self):
tv = Proxy(Television()) …Run Code Online (Sandbox Code Playgroud) 我想为一个类而不是一个接口创建一个代理。有描述为此目的使用 cglib 或 Javassist 的答案(例如/sf/answers/311499891/),但我遇到了麻烦,因为我对代理感兴趣的类没有无参数构造函数,因此Enhancer.create()抛出异常。查看 Javassist ProxyFactoryjavadoc,它也需要构造函数参数。
显而易见的解决方法是通过反射并传递一个 nulls/0/etc 数组来查找构造函数参数类型。但是如果构造函数抛出异常,这将不起作用。
有没有更好的选择(也许使用其他库)?
这是Proxy类的方法签名:
Object java.lang.reflect.Proxy.newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) throws IllegalArgumentException
Run Code Online (Sandbox Code Playgroud)
我检查代理类中newProxyInstance的源代码,我找不到代理对象将自己传递给InvocationHandler方法的位置
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable;
Run Code Online (Sandbox Code Playgroud)
有人知道吗?
谢谢
proxy-classes ×11
java ×4
python ×3
proxy ×2
axis ×1
c# ×1
cglib ×1
go ×1
javassist ×1
kotlin ×1
mvvm ×1
overriding ×1
php ×1
php4 ×1
polymorphism ×1
reflection ×1
setattr ×1
spring ×1
web-services ×1