小编Mon*_*ael的帖子

R.java背后的概念是什么?

在android中,R.java用于提供对XML文件中定义的资源的访问.要访问资源,我们需要调用findViewById()传入要获取的资源的id的方法.

这与Spring类似,其中bean在XML上下文中定义,并通过使用应用程序上下文获取. context.getBean("beanId")

这提供了松散耦合,因为bean是在外部定义的,并且可以在不修改代码的情况下进行更改.

这让我很困惑.虽然Android看起来与spring相似,但它有什么优势?

  1. 有一个中间的R.java有什么意义呢?我们难道不能通过使用资源读取器/应用程序上下文直接从XML获取资源.例如findViewById("resourceId")
  2. 没有任何松耦合.由于R.java中的引用会自动生成,因此如何删除资源并放入新资源?
  3. 它遵循什么样的设计模式(如果有的话)?
  4. 使用IOC(如Roboguice)注入资源不是更好吗?为什么然后谷歌决定给我们这样一种奇怪的资源合作方式?

请原谅我的无知.我是一个新手Java开发人员,一次尝试太多东西.:-)感谢您的所有反馈.

architecture android r.java-file android-resources

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

如何在MySQL中创建临时过程?

我目前正在为餐馆开发门户应用程序.使用的后端数据库是Mysql,我使用Spring JDBC支持编写数据访问逻辑.

我的一些DAO混乱了多个查询,并且获得了大量的代码.我认为我可以通过将一些逻辑转移到SQL-PSM过程来减小大小和复杂性(因为Java中的数据绑定和粘合代码是地狱的憎恶).

但是我没有Db上的DDL权限,因此无法创建过程.

我想知道是否有办法创建一个可丢弃的\临时过程,您可以像DML语句一样直接执行而无需先创建它.

即我想要一个减去create关键字的程序,这将完成我的工作,返回结果并消失.

谷歌搜索了很多但找不到任何东西.:'(只是想知道你们是否知道一个优雅的解决方案.

java mysql sql database

15
推荐指数
1
解决办法
9806
查看次数

如何将包含<character的字符串属性注入Spring bean?

我有我的DAO的bean定义 -

<bean id="userDao" class="UserDao">
<property name="dataSource" ref="dataSource" />
<property name="queryPurgeInvalidReferrals" value="delete from reference where date < ?" />
</bean>
Run Code Online (Sandbox Code Playgroud)

我收到错误 - 与元素类型"property"关联的属性"value"的值不得包含"<"字符.

java spring

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

如何将多个命名参数传递给Spring JdbcTemplate?

我在Spring Dao中有以下代码可以正常工作 -

Object args[] = { userId, restaurantId };
int userOrderCount = getJdbcTemplate()
    .queryForInt(
         "SELECT COUNT(orderid) FROM orders WHERE useridfk_order = ? AND restaurantidfk_order = ?", 
         args
    );
Run Code Online (Sandbox Code Playgroud)

但是,如果我决定使用NamedParameters作为我的查询,如下所示 -

int userOrderCount = getNamedParameterJdbcTemplate()
    .queryForInt(
         "SELECT COUNT(orderid) FROM orders WHERE useridfk_order = :userId AND restaurantidfk_order = :restaurantId", 
         new MapSqlParameterSource(":restaurantId", restaurantId)
             .addValue(":userId", userId)
    );
Run Code Online (Sandbox Code Playgroud)

我得到这个例外 -

org.springframework.dao.InvalidDataAccessApiUsageException: No value supplied for the SQL parameter 'userId': No value registered for key 'userId'.
Run Code Online (Sandbox Code Playgroud)

我知道金色的格言"如果没有破坏就不要修理它".

但是,我仍然不禁想知道为什么会这样?

java database spring jdbc

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

如何在Struts迭代器中访问ValueStack对象?

我有以下代码:

<s:iterator value="reviews">

    <img src="<s:property value="#request.restaurant.portalImage.url"  />" />

    <s:property value="user.firstName" />
    <s:property value="user.lastName" />
    <s:property value="rating" />
    <s:property value="review" />

</s:iterator>
Run Code Online (Sandbox Code Playgroud)

评论是一个评论对象列表,其中包含评论的详细信息,例如评级和用户名.

我的问题是我无法访问循环中ValueStack上的任何对象.

循环外部<s:property value="#request.restaurant.portalImage.url" />正常工作.但是在循环中它打印为null.

AFAIK和迭代器在ValueStack上推送它的集合,以便所有OGNL表达式都能解决它.但我使用了#,这意味着我明确指定了解析的根对象.

为什么它仍然不起作用?

java struts2 ognl valuestack

7
推荐指数
1
解决办法
4278
查看次数

如何保护解密密钥免受反编译?

我是初学java程序员.我正在开发一个解密一些数据的应用程序.解密密钥被硬编码到软件中,因此可以通过分析字节码来看到.

我知道逆向工程不能完全防止,所以我要做的是尽可能地使这个过程变得更加困难.

我的想法不是直接将密钥放入我的代码中,而是让它经历某种转换.例如,我可以写 -

private static final byte[] HC256A = Hex
            .decode("8589075b0df3f6d82fc0c5425179b6a6"
                    + "3465f053f2891f808b24744e18480b72"
                    + "ec2792cdbf4dcfeb7769bf8dfa14aee4"
                    + "7b4c50e8eaf3a9c8f506016c81697e32");
Run Code Online (Sandbox Code Playgroud)

这样,看字节码的人无法立即读取它.但是必须遵循逻辑并对其应用转换,这在字节级别上不会那么容易.

那你觉得怎么样?这有用吗?除十六进制解码之外,最好的转换是什么?是否有其他方法可用于保护硬编码的解密密钥?

谢谢你的所有建议.

java security encryption drm reverse-engineering

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

如何在Spring中使用相同的连接进行两次查询?

我在基于Spring JdbcTemplate的dao中有以下代码 -

getJdbcTemplate().update("Record Insert Query...");
int recordId = getJdbcTemplate().queryForInt("SELECT last_insert_id()");
Run Code Online (Sandbox Code Playgroud)

问题是我有时使用连接池中的不同连接来执行update和queryForInt查询.

这导致返回错误的recordId,因为应该从发出插入查询的同一连接调用MySql last_insert_id().

我考虑过SingleConnectionDataSource但不想使用它,因为它会降低应用程序性能.我只想要这两个查询的单一连接.并非所有服务的所有请求.

所以我有两个问题:

  1. 我可以管理模板类使用的连接吗?
  2. JdbcTemplate是否执行自动事务管理?如果我手动将事务应用于我的Dao方法,是否意味着每个查询将创建两个事务?

希望你们能够对这个话题有所了解.

更新 - 我尝试了nwinkler的方法并将我的服务层包装在一个事务中.我很惊讶地发现在一段时间之后会再次弹出相同的错误.深入研究Spring源代码我发现了这个 -

public <T> T execute(PreparedStatementCreator psc, PreparedStatementCallback<T> action) 
throws DataAccessException {
//Lots of code  
Connection con = DataSourceUtils.getConnection(getDataSource()); 
//Lots of code 
}
Run Code Online (Sandbox Code Playgroud)

因此,与我的想法相反,每个事务不一定有一个数据库连接,但每个查询执行一个连接.这让我回到了我的问题.我想从同一个连接执行两个查询.:-(

更新 -

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
        destroy-method="close">
        <property name="driverClassName" value="${db.driver}" />
        <property name="url" value="${db.jdbc.url}" />
        <property name="username" value="${db.user}" />
        <property name="password" value="${db.password}" />
        <property name="maxActive" value="${db.max.active}" />
        <property name="initialSize" value="20" />
    </bean>

    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"
        autowire="byName"> …
Run Code Online (Sandbox Code Playgroud)

java mysql database spring jdbc

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

如何从在线更新站点创建eclipse更新存档?

每次改变我的eclipse安装时,我都厌倦了从网上安装数百个插件(我使用了大量的em).

eclipse在插件安装过程中所做的是从更新站点下载相关的jar并安装它们.

有没有办法将这些下载罐捆绑到一个存档中,以便下次可以在本地更新而无需再次下载所有插件?

eclipse plugins archive

5
推荐指数
2
解决办法
1766
查看次数

如何同步两种方法

我在Java中有以下代码用于聊天服务器应用程序 -

public synchronized List<ChatMessage> getMessages(int messageNumber) {
    return messages.subList(messageNumber + 1, messages.size());
}

public synchronized int addMessage(ChatMessage c) {
    messages.add(c);
    return messages.size()-1;
}
Run Code Online (Sandbox Code Playgroud)

我有以下测试代码 -

public static void main(String[] args) {
    final ChatRoom c = new ChatRoom();
    Thread user1 = new Thread(new Runnable() {
        public void run() {
            for(int i=0;i<1000;i++) {
                c.addMessage(new ChatMessage());
                c.getMessages(0);
            }
        }
    });
    Thread user2 = new Thread(new Runnable() {
        public void run() {
            for(int i=0;i<1000;i++) {
                c.addMessage(new ChatMessage());
                c.getMessages(0).size();
            }
        }
    });
    user1.start();
    user2.start(); …
Run Code Online (Sandbox Code Playgroud)

java collections concurrency multithreading

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

为什么RC4无法处理大量加密数据?

我有以下代码解密文件.

package encryption;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.security.Security;

import javax.crypto.Cipher;
import javax.crypto.CipherInputStream;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class Decrypter {

    private static final String PASSWORD = "t_9Y#i@eT[h3}-7!";
    private static final String KEY_ALGORITHM = "PBEWithMD5AndDES";
    private static final String CIPHER_ALGORITHM = "RC4"; //Using Salsa20 or HC256 solves the problem
    private static final String PROVIDER = "BC";

    public static void main(String[] args) throws Exception {
        Security.addProvider(new BouncyCastleProvider());

        File inputFile = new …
Run Code Online (Sandbox Code Playgroud)

java security encryption bouncycastle jce

0
推荐指数
1
解决办法
1951
查看次数