Browse Source

Polishing

(cherry picked from commit 749b65b)
pull/465/head
Juergen Hoeller 12 years ago
parent
commit
3da9a3193c
  1. 28
      spring-context/src/main/java/org/springframework/context/support/SimpleThreadScope.java
  2. 29
      spring-context/src/test/java/org/springframework/aop/framework/CglibProxyTests.java
  3. 40
      spring-jdbc/src/main/java/org/springframework/jdbc/core/JdbcOperations.java
  4. 18
      spring-jdbc/src/main/java/org/springframework/jdbc/core/JdbcTemplate.java
  5. 6
      spring-jdbc/src/main/java/org/springframework/jdbc/core/ParameterizedPreparedStatementSetter.java

28
spring-context/src/main/java/org/springframework/context/support/SimpleThreadScope.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -27,14 +27,17 @@ import org.springframework.beans.factory.config.Scope; @@ -27,14 +27,17 @@ import org.springframework.beans.factory.config.Scope;
import org.springframework.core.NamedThreadLocal;
/**
* Thread-backed {@link Scope} implementation.
* A simple thread-backed {@link Scope} implementation.
*
* <p><strong>Note</strong> that the {@code SimpleThreadScope} <em>does not clean up any objects</em> associated
* with it. As such, it's typically preferable to use the {@link org.springframework.web.context.request.RequestScope}
* in Web environments.
* <p><strong>Note:</strong> {@code SimpleThreadScope} <em>does not clean up
* any objects</em> associated with it. As such, it is typically preferable to
* use {@link org.springframework.web.context.request.RequestScope RequestScope}
* in web environments.
*
* <p>For a implementation of a thread-based {@code Scope} with support for destruction callbacks, refer to <a
* href="http://www.springbyexample.org/twiki/bin/view/Example/CustomThreadScopeModule">this module</a>.
* <p>For an implementation of a thread-based {@code Scope} with support for
* destruction callbacks, refer to the
* <a href="http://www.springbyexample.org/examples/custom-thread-scope-module.html">
* Spring by Example Custom Thread Scope Module</a>.
*
* <p>Thanks to Eugene Kuleshov for submitting the original prototype for a thread scope!
*
@ -55,8 +58,9 @@ public class SimpleThreadScope implements Scope { @@ -55,8 +58,9 @@ public class SimpleThreadScope implements Scope {
}
};
public Object get(String name, ObjectFactory objectFactory) {
Map<String, Object> scope = threadScope.get();
public Object get(String name, ObjectFactory<?> objectFactory) {
Map<String, Object> scope = this.threadScope.get();
Object object = scope.get(name);
if (object == null) {
object = objectFactory.getObject();
@ -66,13 +70,13 @@ public class SimpleThreadScope implements Scope { @@ -66,13 +70,13 @@ public class SimpleThreadScope implements Scope {
}
public Object remove(String name) {
Map<String, Object> scope = threadScope.get();
Map<String, Object> scope = this.threadScope.get();
return scope.remove(name);
}
public void registerDestructionCallback(String name, Runnable callback) {
logger.warn("SimpleThreadScope does not support descruction callbacks. " +
"Consider using a RequestScope in a Web environment.");
logger.warn("SimpleThreadScope does not support destruction callbacks. " +
"Consider using RequestScope in a web environment.");
}
public Object resolveContextualObject(String key) {

29
spring-context/src/test/java/org/springframework/aop/framework/CglibProxyTests.java

@ -16,18 +16,13 @@ @@ -16,18 +16,13 @@
package org.springframework.aop.framework;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import java.io.Serializable;
import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.junit.Test;
import test.mixin.LockMixinAdvisor;
import org.springframework.aop.ClassFilter;
import org.springframework.aop.MethodMatcher;
import org.springframework.aop.Pointcut;
@ -42,10 +37,11 @@ import org.springframework.tests.aop.interceptor.NopInterceptor; @@ -42,10 +37,11 @@ import org.springframework.tests.aop.interceptor.NopInterceptor;
import org.springframework.tests.sample.beans.ITestBean;
import org.springframework.tests.sample.beans.TestBean;
import test.mixin.LockMixinAdvisor;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
/**
* Additional and overridden tests for the CGLIB proxy.
* Additional and overridden tests for CGLIB proxies.
*
* @author Rod Johnson
* @author Juergen Hoeller
@ -56,7 +52,8 @@ import test.mixin.LockMixinAdvisor; @@ -56,7 +52,8 @@ import test.mixin.LockMixinAdvisor;
@SuppressWarnings("serial")
public final class CglibProxyTests extends AbstractAopProxyTests implements Serializable {
private static final String DEPENDENCY_CHECK_CONTEXT = CglibProxyTests.class.getSimpleName() + "-with-dependency-checking.xml";
private static final String DEPENDENCY_CHECK_CONTEXT =
CglibProxyTests.class.getSimpleName() + "-with-dependency-checking.xml";
@Override
@ -354,7 +351,6 @@ public final class CglibProxyTests extends AbstractAopProxyTests implements Seri @@ -354,7 +351,6 @@ public final class CglibProxyTests extends AbstractAopProxyTests implements Seri
@Test
public void testAddAdviceAtRuntime() {
TestBean bean = new TestBean();
CountingBeforeAdvice cba = new CountingBeforeAdvice();
ProxyFactory pf = new ProxyFactory();
@ -364,17 +360,13 @@ public final class CglibProxyTests extends AbstractAopProxyTests implements Seri @@ -364,17 +360,13 @@ public final class CglibProxyTests extends AbstractAopProxyTests implements Seri
pf.setProxyTargetClass(true);
TestBean proxy = (TestBean) pf.getProxy();
assertTrue(AopUtils.isCglibProxy(proxy));
proxy.getAge();
assertEquals(0, cba.getCalls());
((Advised) proxy).addAdvice(cba);
proxy.getAge();
assertEquals(1, cba.getCalls());
}
@ -386,7 +378,6 @@ public final class CglibProxyTests extends AbstractAopProxyTests implements Seri @@ -386,7 +378,6 @@ public final class CglibProxyTests extends AbstractAopProxyTests implements Seri
proxyFactory.setProxyTargetClass(true);
MyBean proxy = (MyBean) proxyFactory.getProxy();
assertEquals(4, proxy.add(1, 3));
assertEquals(1, advice.getCalls("add"));
}
@ -444,7 +435,6 @@ public final class CglibProxyTests extends AbstractAopProxyTests implements Seri @@ -444,7 +435,6 @@ public final class CglibProxyTests extends AbstractAopProxyTests implements Seri
public final void foo() {
}
}
}
@ -481,7 +471,6 @@ class NoArgCtorTestBean { @@ -481,7 +471,6 @@ class NoArgCtorTestBean {
public void reset() {
called = false;
}
}
@ -490,15 +479,11 @@ class ProtectedMethodTestBean { @@ -490,15 +479,11 @@ class ProtectedMethodTestBean {
protected String getString() {
return "foo";
}
}
class UnsupportedInterceptor implements MethodInterceptor {
/**
* @see org.aopalliance.intercept.MethodInterceptor#invoke(org.aopalliance.intercept.MethodInvocation)
*/
@Override
public Object invoke(MethodInvocation mi) throws Throwable {
throw new UnsupportedOperationException(mi.getMethod().getName());

40
spring-jdbc/src/main/java/org/springframework/jdbc/core/JdbcOperations.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -311,8 +311,7 @@ public interface JdbcOperations { @@ -311,8 +311,7 @@ public interface JdbcOperations {
* @return a result object returned by the action, or {@code null}
* @throws DataAccessException if there is any problem
*/
<T> T execute(PreparedStatementCreator psc, PreparedStatementCallback<T> action)
throws DataAccessException;
<T> T execute(PreparedStatementCreator psc, PreparedStatementCallback<T> action) throws DataAccessException;
/**
* Execute a JDBC data access operation, implemented as callback action
@ -354,8 +353,7 @@ public interface JdbcOperations { @@ -354,8 +353,7 @@ public interface JdbcOperations {
* @return an arbitrary result object, as returned by the ResultSetExtractor
* @throws DataAccessException if there is any problem
*/
<T> T query(String sql, PreparedStatementSetter pss, ResultSetExtractor<T> rse)
throws DataAccessException;
<T> T query(String sql, PreparedStatementSetter pss, ResultSetExtractor<T> rse) throws DataAccessException;
/**
* Query given SQL to create a prepared statement from SQL and a list
@ -370,8 +368,7 @@ public interface JdbcOperations { @@ -370,8 +368,7 @@ public interface JdbcOperations {
* @throws DataAccessException if the query fails
* @see java.sql.Types
*/
<T> T query(String sql, Object[] args, int[] argTypes, ResultSetExtractor<T> rse)
throws DataAccessException;
<T> T query(String sql, Object[] args, int[] argTypes, ResultSetExtractor<T> rse) throws DataAccessException;
/**
* Query given SQL to create a prepared statement from SQL and a list
@ -428,8 +425,7 @@ public interface JdbcOperations { @@ -428,8 +425,7 @@ public interface JdbcOperations {
* @param rch object that will extract results, one row at a time
* @throws DataAccessException if the query fails
*/
void query(String sql, PreparedStatementSetter pss, RowCallbackHandler rch)
throws DataAccessException;
void query(String sql, PreparedStatementSetter pss, RowCallbackHandler rch) throws DataAccessException;
/**
* Query given SQL to create a prepared statement from SQL and a list of
@ -443,8 +439,7 @@ public interface JdbcOperations { @@ -443,8 +439,7 @@ public interface JdbcOperations {
* @throws DataAccessException if the query fails
* @see java.sql.Types
*/
void query(String sql, Object[] args, int[] argTypes, RowCallbackHandler rch)
throws DataAccessException;
void query(String sql, Object[] args, int[] argTypes, RowCallbackHandler rch) throws DataAccessException;
/**
* Query given SQL to create a prepared statement from SQL and a list of
@ -500,8 +495,7 @@ public interface JdbcOperations { @@ -500,8 +495,7 @@ public interface JdbcOperations {
* @return the result List, containing mapped objects
* @throws DataAccessException if the query fails
*/
<T> List<T> query(String sql, PreparedStatementSetter pss, RowMapper<T> rowMapper)
throws DataAccessException;
<T> List<T> query(String sql, PreparedStatementSetter pss, RowMapper<T> rowMapper) throws DataAccessException;
/**
* Query given SQL to create a prepared statement from SQL and a list
@ -516,8 +510,7 @@ public interface JdbcOperations { @@ -516,8 +510,7 @@ public interface JdbcOperations {
* @throws DataAccessException if the query fails
* @see java.sql.Types
*/
<T> List<T> query(String sql, Object[] args, int[] argTypes, RowMapper<T> rowMapper)
throws DataAccessException;
<T> List<T> query(String sql, Object[] args, int[] argTypes, RowMapper<T> rowMapper) throws DataAccessException;
/**
* Query given SQL to create a prepared statement from SQL and a list
@ -582,8 +575,7 @@ public interface JdbcOperations { @@ -582,8 +575,7 @@ public interface JdbcOperations {
* return exactly one row
* @throws DataAccessException if the query fails
*/
<T> T queryForObject(String sql, Object[] args, RowMapper<T> rowMapper)
throws DataAccessException;
<T> T queryForObject(String sql, Object[] args, RowMapper<T> rowMapper) throws DataAccessException;
/**
* Query given SQL to create a prepared statement from SQL and a list
@ -600,8 +592,7 @@ public interface JdbcOperations { @@ -600,8 +592,7 @@ public interface JdbcOperations {
* return exactly one row
* @throws DataAccessException if the query fails
*/
<T> T queryForObject(String sql, RowMapper<T> rowMapper, Object... args)
throws DataAccessException;
<T> T queryForObject(String sql, RowMapper<T> rowMapper, Object... args) throws DataAccessException;
/**
* Query given SQL to create a prepared statement from SQL and a
@ -1009,7 +1000,7 @@ public interface JdbcOperations { @@ -1009,7 +1000,7 @@ public interface JdbcOperations {
* @param batchArgs the List of Object arrays containing the batch of arguments for the query
* @return an array containing the numbers of rows affected by each update in the batch
*/
public int[] batchUpdate(String sql, List<Object[]> batchArgs);
public int[] batchUpdate(String sql, List<Object[]> batchArgs) throws DataAccessException;
/**
* Execute a batch using the supplied SQL statement with the batch of supplied arguments.
@ -1019,7 +1010,7 @@ public interface JdbcOperations { @@ -1019,7 +1010,7 @@ public interface JdbcOperations {
* (constants from {@code java.sql.Types})
* @return an array containing the numbers of rows affected by each update in the batch
*/
public int[] batchUpdate(String sql, List<Object[]> batchArgs, int[] argTypes);
public int[] batchUpdate(String sql, List<Object[]> batchArgs, int[] argTypes) throws DataAccessException;
/**
* Execute multiple batches using the supplied SQL statement with the collect of supplied arguments.
@ -1032,7 +1023,9 @@ public interface JdbcOperations { @@ -1032,7 +1023,9 @@ public interface JdbcOperations {
* @return an array containing for each batch another array containing the numbers of rows affected
* by each update in the batch
*/
public <T> int[][] batchUpdate(String sql, Collection<T> batchArgs, int batchSize, ParameterizedPreparedStatementSetter<T> pss);
public <T> int[][] batchUpdate(String sql, Collection<T> batchArgs, int batchSize,
ParameterizedPreparedStatementSetter<T> pss) throws DataAccessException;
//-------------------------------------------------------------------------
// Methods dealing with callable statements
@ -1051,8 +1044,7 @@ public interface JdbcOperations { @@ -1051,8 +1044,7 @@ public interface JdbcOperations {
* @return a result object returned by the action, or {@code null}
* @throws DataAccessException if there is any problem
*/
<T> T execute(CallableStatementCreator csc, CallableStatementCallback<T> action)
throws DataAccessException;
<T> T execute(CallableStatementCreator csc, CallableStatementCallback<T> action) throws DataAccessException;
/**
* Execute a JDBC data access operation, implemented as callback action

18
spring-jdbc/src/main/java/org/springframework/jdbc/core/JdbcTemplate.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2013 the original author or authors.
* Copyright 2002-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -367,7 +367,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { @@ -367,7 +367,7 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {
protected Connection createConnectionProxy(Connection con) {
return (Connection) Proxy.newProxyInstance(
ConnectionProxy.class.getClassLoader(),
new Class[] {ConnectionProxy.class},
new Class<?>[] {ConnectionProxy.class},
new CloseSuppressingInvocationHandler(con));
}
@ -929,21 +929,17 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations { @@ -929,21 +929,17 @@ public class JdbcTemplate extends JdbcAccessor implements JdbcOperations {
});
}
public int[] batchUpdate(String sql, List<Object[]> batchArgs) {
public int[] batchUpdate(String sql, List<Object[]> batchArgs) throws DataAccessException {
return batchUpdate(sql, batchArgs, new int[0]);
}
public int[] batchUpdate(String sql, List<Object[]> batchArgs, int[] argTypes) {
public int[] batchUpdate(String sql, List<Object[]> batchArgs, int[] argTypes) throws DataAccessException {
return BatchUpdateUtils.executeBatchUpdate(sql, batchArgs, argTypes, this);
}
/*
* (non-Javadoc)
* @see org.springframework.jdbc.core.JdbcOperations#batchUpdate(java.lang.String, java.util.Collection, int, org.springframework.jdbc.core.ParameterizedPreparedStatementSetter)
*
* Contribution by Nicolas Fabre
*/
public <T> int[][] batchUpdate(String sql, final Collection<T> batchArgs, final int batchSize, final ParameterizedPreparedStatementSetter<T> pss) {
public <T> int[][] batchUpdate(String sql, final Collection<T> batchArgs, final int batchSize,
final ParameterizedPreparedStatementSetter<T> pss) throws DataAccessException {
if (logger.isDebugEnabled()) {
logger.debug("Executing SQL batch update [" + sql + "] with a batch size of " + batchSize);
}

6
spring-jdbc/src/main/java/org/springframework/jdbc/core/ParameterizedPreparedStatementSetter.java

@ -1,5 +1,5 @@ @@ -1,5 +1,5 @@
/*
* Copyright 2002-2012 the original author or authors.
* Copyright 2002-2014 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -20,7 +20,8 @@ import java.sql.PreparedStatement; @@ -20,7 +20,8 @@ import java.sql.PreparedStatement;
import java.sql.SQLException;
/**
* Parameterized callback interface used by the {@link JdbcTemplate} class for batch updates.
* Parameterized callback interface used by the {@link JdbcTemplate} class for
* batch updates.
*
* <p>This interface sets values on a {@link java.sql.PreparedStatement} provided
* by the JdbcTemplate class, for each of a number of updates in a batch using the
@ -40,7 +41,6 @@ public interface ParameterizedPreparedStatementSetter<T> { @@ -40,7 +41,6 @@ public interface ParameterizedPreparedStatementSetter<T> {
/**
* Set parameter values on the given PreparedStatement.
*
* @param ps the PreparedStatement to invoke setter methods on
* @param argument the object containing the values to be set
* @throws SQLException if a SQLException is encountered (i.e. there is no need to catch SQLException)

Loading…
Cancel
Save