在android中,R.java用于提供对XML文件中定义的资源的访问.要访问资源,我们需要调用findViewById()传入要获取的资源的id的方法.
这与Spring类似,其中bean在XML上下文中定义,并通过使用应用程序上下文获取. context.getBean("beanId")
这提供了松散耦合,因为bean是在外部定义的,并且可以在不修改代码的情况下进行更改.
这让我很困惑.虽然Android看起来与spring相似,但它有什么优势?
- 有一个中间的R.java有什么意义呢?我们难道不能通过使用资源读取器/应用程序上下文直接从XML获取资源.例如
findViewById("resourceId")- 没有任何松耦合.由于R.java中的引用会自动生成,因此如何删除资源并放入新资源?
- 它遵循什么样的设计模式(如果有的话)?
- 使用IOC(如Roboguice)注入资源不是更好吗?为什么然后谷歌决定给我们这样一种奇怪的资源合作方式?
请原谅我的无知.我是一个新手Java开发人员,一次尝试太多东西.:-)感谢您的所有反馈.
我目前正在为餐馆开发门户应用程序.使用的后端数据库是Mysql,我使用Spring JDBC支持编写数据访问逻辑.
我的一些DAO混乱了多个查询,并且获得了大量的代码.我认为我可以通过将一些逻辑转移到SQL-PSM过程来减小大小和复杂性(因为Java中的数据绑定和粘合代码是地狱的憎恶).
但是我没有Db上的DDL权限,因此无法创建过程.
我想知道是否有办法创建一个可丢弃的\临时过程,您可以像DML语句一样直接执行而无需先创建它.
即我想要一个减去create关键字的程序,这将完成我的工作,返回结果并消失.
谷歌搜索了很多但找不到任何东西.:'(只是想知道你们是否知道一个优雅的解决方案.
我有我的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"的值不得包含"<"字符.
我在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)
我知道金色的格言"如果没有破坏就不要修理它".
但是,我仍然不禁想知道为什么会这样?
我有以下代码:
<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程序员.我正在开发一个解密一些数据的应用程序.解密密钥被硬编码到软件中,因此可以通过分析字节码来看到.
我知道逆向工程不能完全防止,所以我要做的是尽可能地使这个过程变得更加困难.
我的想法不是直接将密钥放入我的代码中,而是让它经历某种转换.例如,我可以写 -
private static final byte[] HC256A = Hex
.decode("8589075b0df3f6d82fc0c5425179b6a6"
+ "3465f053f2891f808b24744e18480b72"
+ "ec2792cdbf4dcfeb7769bf8dfa14aee4"
+ "7b4c50e8eaf3a9c8f506016c81697e32");
Run Code Online (Sandbox Code Playgroud)
这样,看字节码的人无法立即读取它.但是必须遵循逻辑并对其应用转换,这在字节级别上不会那么容易.
那你觉得怎么样?这有用吗?除十六进制解码之外,最好的转换是什么?是否有其他方法可用于保护硬编码的解密密钥?
谢谢你的所有建议.
我在基于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但不想使用它,因为它会降低应用程序性能.我只想要这两个查询的单一连接.并非所有服务的所有请求.
所以我有两个问题:
希望你们能够对这个话题有所了解.
更新 - 我尝试了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) 每次改变我的eclipse安装时,我都厌倦了从网上安装数百个插件(我使用了大量的em).
eclipse在插件安装过程中所做的是从更新站点下载相关的jar并安装它们.
有没有办法将这些下载罐捆绑到一个存档中,以便下次可以在本地更新而无需再次下载所有插件?
我在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) 我有以下代码解密文件.
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 ×8
database ×3
spring ×3
encryption ×2
jdbc ×2
mysql ×2
security ×2
android ×1
architecture ×1
archive ×1
bouncycastle ×1
collections ×1
concurrency ×1
drm ×1
eclipse ×1
jce ×1
ognl ×1
plugins ×1
r.java-file ×1
sql ×1
struts2 ×1
valuestack ×1