小编Aur*_*ere的帖子

LoggerFactory.getLogger(ClassName.class)vs LoggerFactory.getLogger(this.getClass().getName())

我正在努力提高我的Java优化技能.为了实现这一目标,我制作了一个旧程序,并且我正在尽力使其变得更好.在这个程序中,我使用SL4J进行日志记录.为了得到我做的记录器:

private static final Logger logger = LoggerFactory.getLogger(this.getClass().getName());
Run Code Online (Sandbox Code Playgroud)

在我编写代码的时候,我认为这是最好的选择,因为我删除了对类名的引用(可能会被重构).但现在我不再那么肯定了......

private static final Logger logger = LoggerFactory.getLogger(ClassName.class);
Run Code Online (Sandbox Code Playgroud)

另一方面,保留对类名的引用,但它会删除一个方法调用.对于一个班级来说,这可能不是一个很大的改进,但是当你有很多班级时,这可能就是一个问题.

所以我的问题是:

哪种方法更好?使用类名还是通过反射获取?

请用正反面来激励你的答案.谢谢.

java reflection optimization logging slf4j

14
推荐指数
4
解决办法
4万
查看次数

找不到Maven注释处理处理器

我是注释处理的新手,我正在尝试使用Maven使其自动化。我把它放在我的pom.xml中:

<plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.0</version>
            <configuration>
                <annotationProcessors>
                    <annotationProcessor>
                        co.aurasphere.revolver.annotation.processor.InjectAnnotationProcessor</annotationProcessor>
                    <annotationProcessor>
                        co.aurasphere.revolver.annotation.processor.RevolverContextAnnotationProcessor</annotationProcessor>
                </annotationProcessors>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins>
Run Code Online (Sandbox Code Playgroud)

问题是,当我尝试构建项目时,由于Maven无法找到处理器,所以我收到CompilationFailureException。

我发现了这样的其他问题,可以通过将依赖项放在插件之外来解决。我尝试过,但是对我来说没有任何改变。

我想念什么吗?

谢谢。

编辑

这是我对另一个包含处理器和注释的项目的依赖:

    <dependencies>
    <dependency>
        <groupId>co.aurasphere</groupId>
        <artifactId>revolver-annotation-processor</artifactId>
        <version>0.0.3-SNAPSHOT</version>
    </dependency>
</dependencies>
Run Code Online (Sandbox Code Playgroud)

编辑2

经过进一步调查,我决定反编译处理器JAR(使用Maven构建),并且碰巧...我的类不在那里。由于某些原因,Maven没有将我的类编译到JAR中,这就是为什么找不到这些类的原因。我已经尝试找出该版本的问题(以前从未发生过这种情况,而我已经使用Maven了一段时间……)。

首先,该项目的包装是jar。这些类都在src / main / java下。我已经在pom.xml中检查了类路径和源路径是相同的。

这是处理器pom:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>co.aurasphere</groupId>
<artifactId>revolver-annotation-processor</artifactId>
<version>0.0.3-SNAPSHOT</version>
<build>
    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
                <source>1.7</source>
                <target>1.7</target>
            </configuration>
        </plugin>
    </plugins> 
</build>
<dependencies>
    <!-- https://mvnrepository.com/artifact/javax.inject/javax.inject -->
    <dependency>
        <groupId>javax.inject</groupId>
        <artifactId>javax.inject</artifactId>
        <version>1</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity -->
    <dependency>
        <groupId>org.apache.velocity</groupId>
        <artifactId>velocity</artifactId>
        <version>1.7</version>
    </dependency>


</dependencies>
Run Code Online (Sandbox Code Playgroud)

编辑3 …

java annotations maven annotation-processing

7
推荐指数
2
解决办法
8806
查看次数

如何将ResponseBodyAdvice实现到所有控制器?

我需要编辑我的HttpResponse以添加标头值.我正在寻找单点来实现它,并发现这ResponseBodyadvice将有所帮助.

但是我的新课程中的两种方法都没有被调用过.你能否告诉我是否错过了任何配置.

@ControllerAdvice
public class EditResponseHeader implements ResponseBodyAdvice<object> {


@Override
public boolean supports(MethodParameter returnType,
        Class<? extends HttpMessageConverter<?>> converterType) {

   return true;
}

....

@Override
public Object beforeBodyWrite(Object body, MethodParameter returnType,
        MediaType selectedContentType,
        Class<? extends HttpMessageConverter<?>> selectedConverterType,
        ServerHttpRequest request, ServerHttpResponse response) {

    ....

    return body;
}

}
Run Code Online (Sandbox Code Playgroud)

java model-view-controller spring response.addheader

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

Java 8:以非静态方式引用静态方法的方法

我正在研究用于OCP考试的新Stream API,我找到了一些我不太懂的东西.这是我的代码:

void methodOne() {
    this.compare(1, 2); // This works fine.
    Stream.of(1,2,3)
        .sorted(this::compare); // Compilation error.
}

static Integer compare(Integer s1, Integer s2) {
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这里我有一个名为compare的静态方法和一个名为compare的非静态方法.如果我从非静态方法调用compare方法,我会得到一个编译器警告:

应该以静态方式访问TestStream类型的方法compare(Integer,Integer)

如果我在流中使用对该方法的方法引用,则该编译器警告将成为具有相同消息的编译器错误.

我知道为什么我收到警告,但如果我使用方法引用,我不明白为什么这个警告会成为编译错误.我也没有在网上找到任何东西.有人可以向我解释一下吗?

java static java-8 method-reference

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

Spring Data JPA 切片底层 SQL

我正在阅读 Spring Data JPA 官方文档中关于PageSlice(强调我的)之间区别的这一段:

第一种方法允许您将 org.springframework.data.domain.Pageable 实例传递给查询方法,以将分页动态添加到静态定义的查询中。页面知道可用元素和页面的总数。它通过基础结构触发计数查询来计算总数。由于这可能很昂贵(取决于所使用的商店),您可以改为返回 Slice。Slice 只知道下一个 Slice 是否可用,这在遍历更大的结果集时可能就足够了。

我知道如何Page通过使用相同的 where 子句执行额外的计数查询来获取总元素,但是如何Slice通过单个查询知道其他元素是否可用?执行的 SQL 是什么?

java sql spring spring-data-jpa

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

使用注释强制方法实现

好吧,这可能是一个愚蠢的问题,但我必须确定......我有一个类需要用自定义注释进行注释。此外,此类必须实现自定义接口。现在的问题是:有什么方法可以只注释类,然后像接口一样使用注释,例如强制方法实现?我认为这是不可能的,但也许有办法......谢谢。

java annotations interface

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

Gradle 不首先处理注释处理器

我在 Gradle 构建方面遇到问题。在我的项目中,我使用自己制作的注释处理器。该处理器在最后一轮处理中生成一些源文件。在生成的文件中,有一个类(Revolver)被项目代码引用。问题是 Gradle 似乎同时启动注释处理器和编译。这会产生错误,因为生成的类尚未准备好,因此未找到。

为了验证这一点,我添加了一些调试日志记录。

Note: Starting Revolver Injector generation
Note: Starting Revolver Component Provider generation
Note: Starting Revolver Injector generation
Note: Starting Revolver Component Provider generation
E:\workspace\Android Studio\fix-in-produzione\branches\videocurriculum-client-android\app\src\main\java\co\aurasphere\videocurriculum\view\activity\NetworkBaseActivity.java:14: error: cannot find symbol
import co.aurasphere.revolver.Revolver;
                         ^
 symbol:   class Revolver
 location: package co.aurasphere.revolver
Note: Starting Revolver Injector generation
warning: File for type 'co.aurasphere.revolver.Revolver' created in the last round will not be subject to annotation processing.
Note: Starting Revolver Component Provider generation
warning: File for type 'co.aurasphere.revolver.RevolverComponentProvider' created in the last …
Run Code Online (Sandbox Code Playgroud)

android build gradle annotation-processing

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

为什么 jaxb 适配器注解没有添加到代理类中

我的 XSD 看起来像这样:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
...
  <xs:element name="person">
    <xs:complexType>
      ...
      <xs:attribute name="first_name" use="optional" type="xs:string"/>
    </xs:complexType>
  </xs:element>
...
</xs:schema>
Run Code Online (Sandbox Code Playgroud)

我无法将我的适配器注释添加到具体字段(生成的代理类必须有我的适配器注释)。所以结果应该如下

  @XmlJavaTypeAdapter(value=StringAdapter.class, type=String.class)
    @XmlAttribute(name = "first_name")
    protected String firstName;
Run Code Online (Sandbox Code Playgroud)

但我的绑定没有做任何事情。就像它不存在一样。

<jxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
    version="2.1">
  <bindings schemaLocation="XMLreq.xsd" node="/xs:schema/xs:element[@name='person']/xs:complexType/xs:attribute[@name='first_name']" >
           <xjc:javaType adapter="x.y.z.StringHashFunctionAdapter" name="java.lang.String" />
  </bindings>
</jxb:bindings>
Run Code Online (Sandbox Code Playgroud)

我在代理类生成期间没有错误

dependencies {
    xsd2java "com.sun.xml.bind:jaxb-xjc:2.2.7"
    xsd2java "com.sun.xml.bind:jaxb-impl:2.2.7"
}
task xsd2java() {
    doLast {
        jaxbTargetDir.mkdirs()
        ant.taskdef(name: 'xjc', classname: 'com.sun.tools.xjc.XJCTask', classpath: configurations.xsd2java.asPath)
        ant.jaxbTargetDir = jaxbTargetDir
        ant.xjc(destdir: '${jaxbTargetDir}',  package: 'x.y.z.request', schema: 'src/main/resources/XMLreq.xsd', binding: …
Run Code Online (Sandbox Code Playgroud)

java xml jaxb jaxb2 gradle

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

yii2在查询中选择NULL值(选择NULL作为列,...)

有没有办法在YII2中的查询中选择NULL值或精确字符串?我正在尝试加入3个查询,我需要相同数量的列查询,例如"选择NULL作为返回,提交,数量,NULL作为iamount ....."示例:

$subQuery2 = Loan::find()->select('person_id')->where(['sheet_id' => $id]);

$query2 = new Query();$query2 = new Query();
$query2->select(['last_name','first_name','fc.tax','NULL as returned','fc.submitted','fc.amount','NULL as iamount','NULL as interest',
        'b.month','b.year','b.nb']) 

    ->from('sheet as b')
    ->join('JOIN', 'fee as fc',
            'b.id  = fc.sheet_id')     
    ->join('JOIN','person','fc.person_id = person.id')
    ->where(['b.id' => $id])
    ->andWhere(['not in', 'person_id', $subQuery2]);  

$query = new Query();

$query->
select(['last_name','first_name','fc.tax','fi.returned','fc.submitted','fc.amount','fi.amount as iamount','fi.interest',
        'b.month','b.year','b.nb']) 

    ->from('sheet as b')
    ->join('RIGHT JOIN', 'fee as fc',
            'b.id  = fc.sheet_id')     
    ->join('JOIN','person','fc.person_id = person.id')
    ->join('LEFT JOIN','loan as fi',
        'b.id = fi.sheet_id and fc.person_id = fi.person_id')
    ->where(['b.id' => $id])
    ->union($query2) …
Run Code Online (Sandbox Code Playgroud)

php mysql null yii2

4
推荐指数
1
解决办法
1706
查看次数

JBoss 6.1 + PermGen空间

我在Solaris上部署了Jboss 6.1,它运行正常.然后我做了一些FTP和Telnet,直接root登录被禁用.之后我得到了PermGen空间错误.

这个错误可能是什么原因?请帮忙.

错误:

12:21:30,873 ERROR [AbstractKernelController] Error installing to PostClassLoader: name=vfs:///usr05/ccapp/app/jboss-6.1.0/server/srs/deploy/SRSEar.ear state=ClassLoader mode=Manual requiredState=PostClassLoader: org.jboss.deployers.spi.DeploymentException: Error during deploy: vfs:///usr05/ccapp/app/jboss-6.1.0/server/srs/deploy/SRSEar.ear
at org.jboss.deployers.spi.DeploymentException.rethrowAsDeploymentException(DeploymentException.java:49) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:185) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1832) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1550) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1491) [:2.2.2.GA]
at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:379) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:2044) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:1083) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.executeOrIncrementStateDirectly(AbstractController.java:1322) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1246) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1139) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:939) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:654) [jboss-dependency.jar:2.2.0.SP2]
at org.jboss.deployers.plugins.deployers.DeployersImpl.change(DeployersImpl.java:1983) [:2.2.2.GA]
at org.jboss.deployers.plugins.deployers.DeployersImpl.process(DeployersImpl.java:1076) [:2.2.2.GA]
at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:679) [:2.2.2.GA]
at org.jboss.system.server.profileservice.deployers.MainDeployerPlugin.process(MainDeployerPlugin.java:106) [:6.1.0.Final]
at org.jboss.profileservice.dependency.ProfileControllerContext$DelegateDeployer.process(ProfileControllerContext.java:143) [:0.2.2]
at org.jboss.profileservice.dependency.ProfileDeployAction.deploy(ProfileDeployAction.java:151) [:0.2.2]
at org.jboss.profileservice.dependency.ProfileDeployAction.installActionInternal(ProfileDeployAction.java:94) [:0.2.2] …
Run Code Online (Sandbox Code Playgroud)

java permgen solaris-10 jboss6.x

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