在java Web应用程序中调用的Servlet.init()和Filter.init()方法的顺序是什么?首先叫哪一个?是否所有Servlet.init()方法都被调用,而不是任何Filter.doFilter方法?
我需要从输入文档复制到输出文档除了一个属性之外的所有属性.
我的输入是这样的:
<mylink id="nextButton" type="next" href="javascript:;" />
Run Code Online (Sandbox Code Playgroud)
我需要像这样的输出:
<a id="nextButton" href="javascript:;" />
Run Code Online (Sandbox Code Playgroud)
如果我使用以下XSL:
<xsl:template match="mylink">
<a><xsl:copy-of select="attribute::*"/></a>
</xsl:template>
Run Code Online (Sandbox Code Playgroud)
我得到所有属性输出如下:
<a id="nextButton" type="next" href="javascript:;" />
Run Code Online (Sandbox Code Playgroud)
但我想忽略"类型"属性.我尝试过以下但是它们似乎都没有按照我需要的方式工作:
<xsl:copy-of select="attribute::!type"/>
<xsl:copy-of select="attribute::!'type'"/>
<xsl:copy-of select="attribute::*[!type]"/>
<xsl:copy-of select="attribute::not(type)"/>
Run Code Online (Sandbox Code Playgroud)
我应该如何编写样式表以获得所需的输出?
我有两个编译单元:
public class OuterClass{
private static class InnerClass{
public String test(){
return "testing123";
}
}
public static void main( String[] args ){
new CallingClass().test( new InnerClass() );
}
}
public class CallingClass{
public void test( Object o ){
try{
Method m = o.getClass().getMethod( "test" );
Object response = m.invoke( o );
System.out.println( "response: " + response );
}
catch( Exception e ){
e.printStackTrace();
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果它们在同一个包中,一切正常并且打印出"response:testing123".如果它们位于单独的包中,则抛出IllegalAccessException.
据我所知,抛出异常是因为CallingClass无法调用私有的InnerClass方法.但我不明白为什么在同一个包中允许它?InnerClass不受包保护.即使它在同一个包中,也不应在OuterClass外看到Private.我理解错了吗?
对此答案的评论如何减少Java日志记录样板代码?强烈建议不要使用记录器作为实例成员变量.我可以想到两个负面的副作用:
1)超类日志与子类的记录器
2)对象无法序列化(除非标记为瞬态)
但是,如果不需要序列化并且使用子类名称进行日志记录不是问题,那还有什么可以避免的原因吗?我认为它减少了样板代码,避免了将logger变量定义从一个类复制到另一个类时的复制粘贴错误.即使Spring框架(我相信它具有非常好的编码标准)也使用这种方法.