标签: transient

温莎城堡:我的瞬态组件会被垃圾收集吗?

使用Castle Windsor,我有一个配置了瞬态生活方式的组件:

<component id="publish.mapping.default"
                   service="IMyService, MyAssembly"
                   type="MyServiceImplementation, Myassembly" 
                   lifestyle="transient" />
Run Code Online (Sandbox Code Playgroud)

将使用这样的:

var service = container.Resolve<IMyService>(componentId);
// service usage ....
// service goes out of scope ... 
Run Code Online (Sandbox Code Playgroud)

我的问题是,服务实例是否会在超出范围后进行垃圾收集,或者Castle Windsor会保留引用吗?我发现了这个类似的问题,这意味着后者可能就是这种情况 - 但是在检查了那里发布的链接之后,我不确定讨论是关于保持引用,还是确保在实现IDisposable时对象被处理掉.我的物品不需要处理.

如果Castle Windsor坚持实例,是否有任何简单的方法来阻止这种情况(可能是通过配置)?

编辑
看来,我需要设置发布跟踪策略.可以在xml配置文件中配置,还是需要在代码中设置?是否可以按组件设置版本跟踪策略?

.net c# castle-windsor transient

6
推荐指数
1
解决办法
2814
查看次数

在Rails中,有没有办法指定你想要attr_accessor的TYPE,并使用内置的Rails验证来验证它?

我从来没有找到一个很好的方法来做到这一点,所以我想我会问.

例如,在ActiveRecord模型中,数据库支持的属性会自动进行类型转换为适当的数据库支持类型.如果我有一个Category模型,它有几个属性的,说namecategory_id,如果我是这样的:

Category.new(params[:category])
Run Code Online (Sandbox Code Playgroud)

Rails知道这name是一个String并且category_id是一个Integer.

假设我有几个我要验证的瞬态/合成属性,并且它们具有特定类型.我想从表单中提交它们,我希望它们根据它们的定义自动转换为String或Integer或Date(例如).

如果我要在Rails模型中声明一些内容,例如:

attr_accessor :some_number_variable
attr_accessor :some_date
Run Code Online (Sandbox Code Playgroud)

是否有一个内置的方式来告诉Rails"我想你前强制转换为整数,而后者的日期,当我走Category.new(params[:category])",只要params[:category][:some_number_variable]params[:category][:some_date]提交给控制器的数据的一部分(我知道考虑到许多日期格式,Date示例可能有点棘手).

validation ruby-on-rails transient attr-accessor

6
推荐指数
2
解决办法
3622
查看次数

具有瞬态场的Java序列化

使用Java Serialization,我知道当一个字段被标记为瞬态时,它不是序列化的.因此,当反序列化对象时,设置为瞬态的字段会发生什么?它们是否设置为构造函数中定义的值?

java serialization transient

6
推荐指数
1
解决办法
745
查看次数

用作锁的瞬态最终字段为空

以下代码抛出一个NullPointerException.

import java.io.*;

public class NullFinalTest {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        Foo foo = new Foo();
        foo.useLock();
        ByteArrayOutputStream buffer = new ByteArrayOutputStream();
        new ObjectOutputStream(buffer).writeObject(foo);
        foo = (Foo) new ObjectInputStream(new ByteArrayInputStream(buffer.toByteArray())).readObject();
        foo.useLock();
    }

    public static class Foo implements Serializable {
        private final String lockUsed = "lock used";
        private transient final Object lock = new Object();
        public void useLock() {
            System.out.println("About to synchronize");
            synchronized (lock) { // <- NullPointerException here on 2nd call
                System.out.println(lockUsed);
            } …
Run Code Online (Sandbox Code Playgroud)

java serialization final nullpointerexception transient

6
推荐指数
1
解决办法
2963
查看次数

Jpa + Spring - 从DB读取后自动设置瞬态字段值

在从数据源读取实体后,为标记为@Transient的字段设置值的最佳解决方案是什么?

我正在使用EclipseLink,我正在使用他的postBuild事件解决方案尝试DescriptorEventAdapter,因为我还需要使用Spring bean获取默认值(显然使用DI),但我知道是否有任何更简单的解决方案我是失踪.

提前致谢

spring jpa transient eclipselink spring-data-jpa

6
推荐指数
1
解决办法
4173
查看次数

java中瞬态变量的任何实时示例

从问题为什么Java有瞬态字段?.我能够理解瞬态.但是,在设计时无法评估使用transient关键字.

public class A implements Serializable 
{
    public String s;
    public transient ts; 
}
Run Code Online (Sandbox Code Playgroud)

如果我以另一种方式做同样的事情..

public class A implements Serializable 
{
    public String s;
    //public transient ts;//removing this variable.

} 
Run Code Online (Sandbox Code Playgroud)

并在类中使用另一个类和define方法并定义变量ts并执行操作并将s的值保存为业务定义.

我没有在网上找到任何实时的例子,我将决定定义一个变量transient.

我怎么能在设计时决定定义瞬态?有没有可以帮助我理解的实时场景?

java serializable transient

6
推荐指数
1
解决办法
2万
查看次数

@Transient不在hibernate中工作

我正在使用hibernate 4.1.9.我的代码是

@Transient
private String ldapIdTemp;
Run Code Online (Sandbox Code Playgroud)

包是

import javax.persistence.Transient;
Run Code Online (Sandbox Code Playgroud)

仍然在hibernate查询中,它不起作用并将该属性放在查询中.

查询片段的一部分(assetasset0_.ldapIdTemp为ldapIdTemp16_0_,)

我不确定我做错了什么.

java hibernate transient

6
推荐指数
2
解决办法
5328
查看次数

Java - 为什么瞬态成员变量在Java标准库中如此广泛使用?

在查看了一些Java Collection类的源代码之后,我发现成员变量总是被使用修改transient.

例如,LinkedList源代码:

public class LinkedList<E> extends AbstractSequentialList<E> implements List<E>, Deque<E>, Cloneable, java.io.Serializable
{
    private transient Entry<E> header = new Entry<E>(null, null, null);
    private transient int size = 0;

    public LinkedList() 
    {
        header.next = header.previous = header;
    }

    public LinkedList(Collection<? extends E> c) {
        this();
        addAll(c);
    }

    // ...other stuff
}
Run Code Online (Sandbox Code Playgroud)

当然,不仅LinkedList使用transient,几乎每个Java集合类都使用它transient来修改其成员变量的至少一半.

所以,我的问题是:为什么在Java标准库中transient使用如此广泛

(当然每个人都知道它的定义和用法transient,但那不是我的问题:)

java transient

6
推荐指数
1
解决办法
701
查看次数

@Transient 字段值是否被加载?

我知道 @Transient 字段值不会保留在数据库中。但是,当从查询创建实体时,是否会从表中加载字段值?(该字段存在于表中)

@Transient
@Column (name = "zipcode")
Integer zipcode;
Run Code Online (Sandbox Code Playgroud)

java persistence jpa transient

5
推荐指数
1
解决办法
1976
查看次数

Angular 2:动态获取 LOCALE_ID(根据请求解析)

我正在尝试将 LOCALE_ID 注入我的自定义组件并在每个 ngOnChanges 事件上跟踪它,以防它已更改(以使用其他语言重新初始化组件)。

在 AppModule 中,我有 LOCALE_ID 提供程序返回当前语言代码('en'、'fr' 等):

{
 provide: LOCALE_ID,
 deps: [I18NextService],
 useFactory: (i18next: I18NextService) => {
  return i18next.language; //string: 'en', 'ru'...
 }
}
Run Code Online (Sandbox Code Playgroud)

默认情况下 OpaqueToken LOCALE_ID 注册为值“en-US”。

{
  provide: LOCALE_ID,
  useValue: 'en-US'
}
Run Code Online (Sandbox Code Playgroud)

然后我用构造函数注入器实现我的组件

constructor(private injector: Injector) {
}
Run Code Online (Sandbox Code Playgroud)

然后我解析 LOCALE_ID 依赖项以获取当前语言环境。

ngOnChanges(changes: SimpleChanges) {
  let localeId = this.injector.get(LOCALE_ID);
   ...
}
Run Code Online (Sandbox Code Playgroud)

问题是 LOCALE_ID 提供程序注册为单例,我总是得到第一个解析值......

要求:

  1. 我不希望自定义组件了解我的 I18NextService

  2. 我不想更改 LOCALE_ID 解析后返回的类型。这可能会破坏其他希望 LOCALE_ID 为字符串的库\控件。这就是为什么我无法将 LOCALE_ID 解析为工厂函数的原因。

如果我可以只注册瞬态解析器就没有问题,但是 angular 2 DI 似乎没有这个功能(Aurelia 有)

欢迎提出建议!

singleton dependency-injection localization transient angular

5
推荐指数
0
解决办法
2773
查看次数