小编tor*_*gat的帖子

让git忽略重命名

我有一个foo.txt我想删除的文件,另一个,bar.txt我想添加.如果这两个文件的内容超过50%相同,Git会考虑将foo.txt其重命名为bar.txt.我怎样才能让Git真正看到这个单独删除,在同一次提交中单独添加,而不更改全局阈值检测%.

谢谢!

git rename

20
推荐指数
1
解决办法
4051
查看次数

使用JAXB解组时将空元素转换为null

使用以下JAXB注释定义类:

class Course {
@XmlElement (name = "book")
List<Book> requiredBooks = new ArrayList<Book>();
Run Code Online (Sandbox Code Playgroud)

解组包含此文档的XML文档时

<course>
  ...
  <book/>
</course>
Run Code Online (Sandbox Code Playgroud)

我最终将一个Book添加到列表中,其所有属性都设置为null.我不控制XML输入.如何防止添加此空白书?我尝试拦截set ..()或添加..()方法,但是在处理集合时,JAXB绕过了setter.有什么建议?

java jaxb

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

发现带注释的方法

在我的 Spring 应用程序中,我有使用 Spring 缓存机制的组件。每个@Cacheable注释指定要使用的缓存。我想自动发现启动时所需的所有缓存,以便可以自动配置它们。

最简单的方法似乎是创建一个标记接口(例如:)CacheUser供每个缓存组件使用:

@Component
public class ComponentA implements CacheUser {
  @Cacheable("dictionaryCache")
  public String getDefinition(String word) {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我会让 Spring 自动发现这个接口的所有实现,并将它们自动连接到一个配置列表,该列表可以在配置缓存管理器时使用。这有效。

@Autowired
private Optional<List<CacheUser>> cacheUsers;
Run Code Online (Sandbox Code Playgroud)

我的计划是获取每个发现的类并找到所有用@Cacheable. 从那里我将访问注释的属性并获取缓存名称。我正在使用AnnotationUtils.findAnnotation()来获取注释声明。

这就是计划失败的地方。Spring 实际上连接代理而不是原始组件,并且注释不会复制到代理的方法中。我发现的唯一解决方法是利用代理实现Advised提供对代理类的访问这一事实:

((Advised)proxy).getTargetSource().getTargetClass().getMethods()
Run Code Online (Sandbox Code Playgroud)

从那里我可以获得原始注释,但这种方法显然很脆弱。

所以两个问题,真的:

  1. 有没有更好的方法来获取代理类定义的注释?
  2. 你能建议任何其他方式来发现@Cacheable我项目中的所有用途吗?我很乐意没有标记界面。

谢谢!

java proxy spring annotations

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

标签 统计

java ×2

annotations ×1

git ×1

jaxb ×1

proxy ×1

rename ×1

spring ×1