Java 如何在@create之前设置Seam组件中的属性?

Java 如何在@create之前设置Seam组件中的属性?,java,seam,jakarta-mail,Java,Seam,Jakarta Mail,我试图设置组件org.jboss.seam.mail.mailSession的以下成员,这些成员定义为: boolean ssl; boolean tls = true; (两者都有getter和setter方法) 在调用用@create注释的create方法之前。 我想阻止框架使用SSL、TLS。mailSession组件检查是否设置了这些MEBER。如果是,它将创建强制javamail使用ssl的属性 到目前为止,我试过: Object comp = Component.getInstan

我试图设置组件
org.jboss.seam.mail.mailSession
的以下成员,这些成员定义为:

boolean ssl;
boolean tls = true;
(两者都有getter和setter方法) 在调用用@create注释的create方法之前。 我想阻止框架使用SSL、TLS。mailSession组件检查是否设置了这些MEBER。如果是,它将创建强制javamail使用ssl的属性

到目前为止,我试过:

Object comp = Component.getInstance("org.jboss.seam.mail.mailSession");
问题:打开javax.mail.Session,在那里我无法访问组件

Object comp = Component.getInstance("org.jboss.seam.mail.mailSession", ScopeType.APPLICATION,false,false);
问题:由于未创建实例,因此返回null

Component comp = Component.forName("org.jboss.seam.mail.mailSession");
问题:返回的是组件而不是实例


我应该怎么做才能切换2位,您会建议修补框架,还是有一种我忽略的更简单的方法?

我使用以下顺序解决了这个问题:

@In(create = true)
private Renderer renderer;
...
Component comp = Component.forName("org.jboss.seam.mail.mailSession");
MailSession ms = (MailSession)  comp.newInstance();
ms.setDebug(true);
ms.setTls(false);
ms.setSsl(false);
ms = ms.create();

renderer.render("/Mail.xhtml");

我想知道MailSession实例是如何连接到组件的,但现在它可以工作。

我使用以下顺序解决它:

@In(create = true)
private Renderer renderer;
...
Component comp = Component.forName("org.jboss.seam.mail.mailSession");
MailSession ms = (MailSession)  comp.newInstance();
ms.setDebug(true);
ms.setTls(false);
ms.setSsl(false);
ms = ms.create();

renderer.render("/Mail.xhtml");

我想知道MailSession实例是如何连接到组件的,但现在它可以工作。

您是否尝试覆盖MailSession? 但是我不确定它是否有效

类似于

@Name("org.jboss.seam.mail.mailSession")
@Install(precedence=Application)
class MyMailSession extends MailSession {

  //override the stuff you want here
}

您是否尝试覆盖邮件会话? 但是我不确定它是否有效

类似于

@Name("org.jboss.seam.mail.mailSession")
@Install(precedence=Application)
class MyMailSession extends MailSession {

  //override the stuff you want here
}
根据,您应该能够在
组件.xml
配置中直接禁用TLS和SSL:

<mail:mail-session debug="true" tls="false" ssl="false" ... />

您已经尝试过了吗?

根据,您应该能够在
组件中直接禁用TLS和SSL。xml
配置:

<mail:mail-session debug="true" tls="false" ssl="false" ... />


您已经试过了吗?

+1应该可以,因为
应用程序的优先级高于
内置的
;这意味着将安装
MyMailSession
,而不是
MailSession
。感谢这种有见地的方法,它更通用,我想我会在某个时候需要它。+1这应该行得通,因为
应用程序的优先级高于
内置的
;这意味着将安装
MyMailSession
,而不是
MailSession
。感谢这种有见地的方法,它更通用,我想我会在某个时候需要它。非常感谢你,它很有魅力。请你把我问的这个问题的答案抄下来,更具体一点(我当然会接受)@stacker当然,我抄了。我很高兴我能帮上忙。非常感谢你,它很有魅力。请你把我问的这个问题的答案抄下来,更具体一点(我当然会接受)@stacker当然,我抄了。我很高兴我能帮上忙。