小编Mar*_*o B的帖子

Spring AOP - 为什么我需要aspectjweaver?

我用Spring AOP写了一个非常简单的Aspect.它有效,但我在理解真正发生的事情时遇到了一些问题.我不明白为什么我要添加aspectjweaver.jar?Spring-AOP文档明确指出,只要我使用Spring-AOP,我就不需要aspectj编译器或weaver:

AOP运行时仍然是纯Spring AOP,并且不依赖于AspectJ编译器或weaver.

我的配置如下所示:

<aop:aspectj-autoproxy />

@Aspect
@Service
public class RemoteInvocationAspect {

    @Before("execution(* at.test.mypackage.*.*(..))")
    public void test() {
        System.out.println("test");
    }
    ...
Run Code Online (Sandbox Code Playgroud)

我也尝试过XML配置,虽然没有改变任何东西.也许我可以放手,但我真的想了解为什么使用aspectj-weaver?如果我没有在maven中添加依赖项,我会得到 java.lang.ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException

java aop spring aspectj spring-aop

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

基于spring注释的配置 - 内存消耗过高?

当我注意到我的客户端应用程序(基于Swing)上使用疯狂的高RAM时,我开始研究它,看起来这与Spring中基于Annotation的配置有某种关系.正如您将在下面的编辑中看到的那样,我意识到这只发生在64位JVM上.

请参阅以下测试代码:

基于xml的配置

<beans ....>
     <bean id="xmlConfigTest" class="at.test.XmlConfigTest" />
</beans>

public class XmlConfigTest extends JFrame {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("config/applicationContext.xml");
        XmlConfigTest frame = (XmlConfigTest) ctx.getBean("xmlConfigTest");
        frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
        frame.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用大约32MB内存,这对我来说似乎没问题.

现在与基于注释的配置相同:

@Service
public class AnnotationConfigTestFrame extends JFrame {
    public static void main(String[] args) throws InterruptedException {
        ApplicationContext ctx = new AnnotationConfigApplicationContext("at.test");

        AnnotationConfigTestFrame frame = (AnnotationConfigTestFrame) ctx
            .getBean("annotationConfigTestFrame");
       frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
       frame.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

打开相框不仅要花费更长的时间,而且在启动时内存消耗量会升至160MB内存,然后在大约152MB处达到平衡,这对我来说似乎非常高.请记住,这只是最基本的情况,我开发的客户端应用程序已经超过400MB,这对于旧机器来说太多了.

有没有人对这种行为有解释?我不明白..

(在这里使用3.1.1.RELEASE顺便说一下.)

编辑* 正如axtavt所建议的,我还尝试直接用Test-Class作为Argument构造AnnotationConfigApplicationContext,这样就不需要类路径扫描.遗憾的是,没有改变内存消耗.

编辑2已删除,请参阅编辑3

编辑3 我现在使用32位和64位JVM以及上面的测试程序在同一台机器(Windows 7 …

java spring jvm spring-annotations

13
推荐指数
2
解决办法
1973
查看次数

Swing桌面开发

关于Java Desktop-gui-applications,我有一个非常笼统的问题。

我的经验: 在过去的几年中,我开发了许多桌面应用程序,其中一些单独使用Swing,一些使用Spring-RCP(这很棒,但是我不能只赌一个尚未更新超过3个的框架)年了)。我也在看Valkyrie RCP,但是在我看来,那里也确实没有那么多动作。我还使用Wicket,Tapestry和最近的JSF2(Primefaces)开发了Web应用程序。在Web应用程序方面积累了一些经验后,我感觉Java桌面GUI已被放弃很久了。当然,我以前没有注意到这一点,但是在开发了Web应用程序之后,我真的看到直接比较桌面uis是多么痛苦和复杂。

我正在寻找的是: 我在这里没有做任何火箭科学,我最想念的是一种构建以下简单布局形式的简便方法

label_a    input_a    feedbackMessage_a
label_b    input_b    feedbackMessage_b
....
button_save
Run Code Online (Sandbox Code Playgroud)

这不仅与布局有关,而且可能是最小的问题。首先,我正在寻找一种将输入字段的值“绑定”到某种“ backing-bean-fields”的方法。我也想使用直接反馈,这意味着如果对input_a的验证失败,我希望在feedbackMessage_a上显示一条消息,而在其他任何地方。第三,我想在此直接反馈中使用JSR-303验证。如果我深入研究典型桌面应用程序的源代码,通常会看到每个按钮都有一个巨大的动作监听器,其中所有值分配,验证和反馈消息创建都是手动编写的。将此与诸如挂毯或jsf2之类的网络框架进行比较。您在那里要做的就是使用某种表达式语言将输入字段“绑定”到变量/字段,就是这样。该值正在得到验证(例如 使用JSR-303注释)和(如果所有值都有效)自动传递到支持Bean的绑定字段中。同样,如果发生验证错误,则会创建一条验证消息,其中输入字段的ID用于标识负责的输入字段。如果存在用于该特定ID的消息组件,则在此处设置验证消息。这是顺理成章的。

现在回到桌面GUI;为了有一个可比的用户界面,比如说一个带有20个输入字段的表单,我可能需要500行侦听器代码,首先我自己读取每个文本字段的值,然后对其进行验证并将其写入相应的变量中。如果我要使用JSR-303,我可以自己打电话给验证器,但是回溯到相应的输入字段并在那里设置反馈消息会很麻烦。很痛苦,不是吗?

我的问题: 有什么方法可以减轻疼痛?您如何开发现代桌面应用程序?您使用什么框架,为什么?是否有可能使用类似webframeworks的绑定方式?如上所述,我如何实现“直接反馈”?我是否错过了这里的培训,或者在过去几年中编写Web应用程序变得更加简单,而Java桌面似乎停滞了呢?(除了JavaFx,但这对我没有帮助)

结束语 别误会,我是Java桌面应用程序的忠实拥护者。在一个我正在工作的中等规模的公司中,在同类环境中(所有客户端都安装了相同的Java版本,依此类推),我真的没有看到Web应用程序的收益。使用webstart,该应用程序启动非常快(当然,在首次下载后)。在我看来,尽管Java中以前端为中心的webframeworks以光速前进,但java-desktop几乎没有动。尽管我可以忍受这样的方式,但我确实必须问这个问题。

swing jgoodies spring-rcp

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

MD5哈希盐渍 - 在哪里储存盐

嗨我有关于MD5 Hash/Salting的问题.

我最近阅读了很多关于散列和盐析的内容,我明白我应该为每个密码使用不同的盐,并且我不应该使用像用户名这样的东西,因为理想情况下盐应该是完全独特的.但我不明白为什么建议将这个盐与密码一起存储在数据库中?

如果攻击者获得哈希和盐,这不是很糟糕吗?我理解攻击者更难,因为独特的盐确保他无法检查所有密码的单个计算哈希值.但是,保持盐的一部分隐藏不是更好吗?

我想到将盐分成两部分.第一部分像往常一样存储在数据库中,第二部分(较小)部分在我的应用程序中硬编码.攻击者几乎不可能获得完整的盐,因为他必须渗透应用程序服务器和数据库.

这是一个好的解决方案吗?盐仍然是独特的,但所有的盐都以相同的顺序结束.

security hash md5 cryptography

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

具有值增量的Map的HashMap同步

我有关于HashMap同步的问题.背景是我试图实现一种简单的暴力检测方法.我将使用一个用户名作为密钥的地图,用于保存用户登录尝试失败的次数.如果登录失败,我想做这样的事情:

    Integer failedAmount = myMap.get("username");
    if (failedAmount == null) {
        myMap.put("username", 1);
    } else {
        failedAmount++;
        if (failedAmount >= THRESHOLD) {
            // possible brute force detected! alert admin / slow down login
            // / or whatever
        }
        myMap.put("username", failedAmount);
    }
Run Code Online (Sandbox Code Playgroud)

我现在想到的机制非常简单:我只会跟踪这一整天并在午夜清除()HashMap或类似的东西.

所以我的问题是:我可以使用的最佳/最快的Map实现是什么?我需要一个完全同步的Map(Collections.sychronizedMap())还是一个ConcurrentHashMap足够?或者甚至只是一个普通的HashMap?我想如果一些增量减少的话,这不是什么大问题吗?

java synchronization synchronized

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

解决我的 PWA 在 Safari 上缺少“Web Push”的问题

我正在开发一个需要推送通知的 PWA。遗憾的是 IOS/Safari目前不支持https://w3c.github.io/push-api/#pushmanager-interface ,所以我想我可能必须以某种方式包装一个本机应用程序。

在 Android 中(在“受信任的 Web 活动”出现之前),您可以使用 WebView 基本上在您的应用程序中显示无头 Chrome 视图。IOS 中的等效项是什么以及推送通知和 Webapp 之间的交互(浏览器需要跳转到特定页面)如何工作?

我还需要的一件事是与我们公司的移动设备管理(即 Microsoft Intune)集成。过去在 Android 中集成了 MDM,我知道这可能是一个主要的痛苦,所以我正在考虑自己构建包装器,以获得最大的灵活性。另一种选择是类似 Ionic 的东西,现在不确定。

push-notification apple-push-notifications ios ionic-framework progressive-web-apps

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

适用于弹簧3.2.6的最兼容的hibernate版本

我现在使用这样的东西:JSF2(PrimeFaces)+ Spring&Spring-Security + JPA2(Hibernate).我就喜欢!但不知怎的,我总是想知道:具有Hibernate的特定Spring版本的推荐(或者可能是"最佳兼容")版本是什么?我们以Spring 3.2.6为例:

如果我看一下spring-orm POM,它似乎使用了hibernate-entitymanager 4.1.9.Final.我应该使用那个,还是最新的4.1.x版本?或者我应该使用hibernate 4.2.x?甚至4.3.x?在我的(简单)测试中,任何工作都很好,但后来我在这里阅读https://jira.springsource.org/browse/SPR-11240,直到春季4才支持hibernate 4.3.

总结一下:我应该使用哪个hibernate版本的spring 3.2.6.RELEASE以及找到类似信息的最佳位置(未来).

java spring hibernate jpa

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