标签: spring

@RequestParam vs @PathVariable

是什么区别@RequestParam@PathVariable同时处理的特殊字符?

+@RequestParam空间接受了.

在这种情况下@PathVariable,+被接受为+.

java spring spring-mvc

324
推荐指数
4
解决办法
39万
查看次数

春天 - @Transactional - 后台会发生什么?

我想知道当你用方法注释方法时实际发生了@Transactional什么?当然,我知道Spring会将该方法包装在Transaction中.

但是,我有以下疑问:

  1. 我听说Spring创建了一个代理类?有人可以更深入地解释这一点.实际存在于该代理类中的是什么?实际班级会发生什么?我怎样才能看到Spring创建的代理类
  2. 我还在Spring文档中读到:

注意:由于此机制基于代理,因此只会拦截通过代理进入的"外部"方法调用.这意味着'自调用',即目标对象中调用目标对象的其他方法的方法,即使被调用的方法被标记,也不会在运行时导致实际的事务@Transactional!

资料来源:http://static.springsource.org/spring/docs/2.0.x/reference/transaction.html

为什么只有外部方法调用才会在Transaction下而不是自调用方法?

java spring transactional spring-jdbc spring-aop

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

仅在序列化期间使用@JsonIgnore,但不反序列化

我有一个发送到服务器和从服务器发送的用户对象.当我发出用户对象时,我不想将散列密码发送给客户端.所以我添加@JsonIgnore了密码属性,但这也阻止了它被反序列化为密码,这使得在没有密码时很难注册用户.

我怎样才能@JsonIgnore应用于序列化而不是反序列化?我正在使用Spring JSONView,所以我没有很多控制权ObjectMapper.

我试过的事情:

  1. 加入@JsonIgnore物业
  2. @JsonIgnore仅添加getter方法

java spring json annotations jackson

298
推荐指数
5
解决办法
26万
查看次数

了解Spring @Autowired用法

我正在阅读spring 3.0.x参考文档以了解Spring Autowired注释:

3.9.2 @Autowired和@Inject

我无法理解下面的例子.我们是否需要在XML中执行某些操作才能使用它?

例1

public class SimpleMovieLister {

    private MovieFinder movieFinder;

    @Autowired
    public void setMovieFinder(MovieFinder movieFinder) {
        this.movieFinder = movieFinder;
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

例2

public class MovieRecommender {

    private MovieCatalog movieCatalog;

    private CustomerPreferenceDao customerPreferenceDao;

    @Autowired
    public void prepare(MovieCatalog movieCatalog,
                    CustomerPreferenceDao customerPreferenceDao) {
        this.movieCatalog = movieCatalog;
        this.customerPreferenceDao = customerPreferenceDao;
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

如何通过自动装配两个类来实现相同的接口并使用相同的类?

例:

class Red implements Color
class Blue implements Color

class myMainClass{
    @Autowired 
    private Color color;

    draw(){
        color.design(); 
    } 
}
Run Code Online (Sandbox Code Playgroud)

将调用哪种设计方法?如何确保调用Red类的设计方法而不是Blue?

java spring autowired spring-3

295
推荐指数
3
解决办法
40万
查看次数

如何在Spring Boot中记录SQL语句?

我想在文件中记录SQL语句.
我有以下属性application.properties

spring.datasource.url=...
spring.datasource.username=user
spring.datasource.password=1234
spring.datasource.driver-class-name=net.sourceforge.jtds.jdbc.Driver

spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true

security.ignored=true
security.basic.enabled=false

logging.level.org.springframework.web=INFO
logging.level.org.hibernate=INFO
logging.file=c:/temp/my-log/app.log
Run Code Online (Sandbox Code Playgroud)

当我运行我的应用程序

cmd>mvn spring-boot:run
Run Code Online (Sandbox Code Playgroud)

我可以在控制台中看到sql语句,但它们不会出现在app.log文件中.该文件仅包含spring的基本日志.

如何在日志文件中查看sql语句?

java logging spring hibernate spring-boot

291
推荐指数
15
解决办法
26万
查看次数

如何将属性值注入使用注释配置的Spring Bean?

我有一堆Spring bean,它们是通过注释从类路径中获取的,例如

@Repository("personDao")
public class PersonDaoImpl extends AbstractDaoImpl implements PersonDao {
    // Implementation omitted
}
Run Code Online (Sandbox Code Playgroud)

在Spring XML文件中,定义了一个PropertyPlaceholderConfigurer:

<bean id="propertyConfigurer" 
  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="location" value="/WEB-INF/app.properties" />
</bean> 
Run Code Online (Sandbox Code Playgroud)

我想将app.properites中的一个属性注入上面显示的bean中.我不能简单地做一些事情

<bean class="com.example.PersonDaoImpl">
    <property name="maxResults" value="${results.max}"/>
</bean>
Run Code Online (Sandbox Code Playgroud)

因为PersonDaoImpl在Spring XML文件中没有特征(它是通过注释从类路径中获取的).我有以下几点:

@Repository("personDao")
public class PersonDaoImpl extends AbstractDaoImpl implements PersonDao {

    @Resource(name = "propertyConfigurer")
    protected void setProperties(PropertyPlaceholderConfigurer ppc) {
    // Now how do I access results.max? 
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我不清楚我如何访问我感兴趣的房产ppc

java spring dependency-injection

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

使用Spring Security时,获取bean中当前用户名(即SecurityContext)信息的正确方法是什么?

我有一个使用Spring Security的Spring MVC Web应用程序.我想知道当前登录用户的用户名.我正在使用下面给出的代码段.这是接受的方式吗?

我不喜欢在这个控制器中调用静态方法 - 这违背了Spring的全部目的,恕我直言.有没有办法配置应用程序以注入当前的SecurityContext或当前的身份验证?

  @RequestMapping(method = RequestMethod.GET)
  public ModelAndView showResults(final HttpServletRequest request...) {
    final String currentUser = SecurityContextHolder.getContext().getAuthentication().getName();
    ...
  }
Run Code Online (Sandbox Code Playgroud)

java spring spring-mvc spring-security

280
推荐指数
9
解决办法
17万
查看次数

java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener

包括我:

  • 所有Spring库,

  • Apache Tomcat 7.0库

    在构建路径中

但它仍然会出错:

SEVERE: Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4660)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at java.util.concurrent.FutureTask.run(FutureTask.java:138)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Jun 2, 2011 11:07:38 AM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Error configuring application listener of class org.springframework.web.context.request.RequestContextListener
java.lang.ClassNotFoundException: org.springframework.web.context.request.RequestContextListener
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:397)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4660)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5226)
    at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5221)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
    at …
Run Code Online (Sandbox Code Playgroud)

spring classnotfoundexception tomcat7

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

将Mockito模拟注入Spring bean

我想将一个Mockito模拟对象注入一个Spring(3+)bean中,以便使用JUnit进行单元测试.我的bean依赖项目前通过@Autowired在私有成员字段上使用注释来注入.

我考虑过使用ReflectionTestUtils.setField但我希望注入的bean实例实际上是一个代理,因此不会声明目标类的私有成员字段.我不希望为依赖创建一个公共setter,因为我将修改我的界面纯粹是为了测试的目的.

我遵循了Spring社区给出的一些建议,但是没有创建模拟并且自动连线失败:

<bean id="dao" class="org.mockito.Mockito" factory-method="mock">
    <constructor-arg value="com.package.Dao" />
</bean>
Run Code Online (Sandbox Code Playgroud)

我目前遇到的错误如下:

...
Caused by: org...NoSuchBeanDefinitionException:
    No matching bean of type [com.package.Dao] found for dependency:
    expected at least 1 bean which qualifies as autowire candidate for this dependency.
    Dependency annotations: {
        @org...Autowired(required=true),
        @org...Qualifier(value=dao)
    }
at org...DefaultListableBeanFactory.raiseNoSuchBeanDefinitionException(D...y.java:901)
at org...DefaultListableBeanFactory.doResolveDependency(D...y.java:770)
Run Code Online (Sandbox Code Playgroud)

如果我将constructor-arg值设置为无效,则在启动应用程序上下文时不会发生错误.

junit spring annotations dependency-injection mockito

276
推荐指数
13
解决办法
23万
查看次数

为什么Spring的ApplicationContext.getBean被认为是坏的?

我问了一个普通的Spring问题:自动转换Spring Beans并让多个人回应,ApplicationContext.getBean()应该尽可能避免调用Spring .这是为什么?

我还应该如何获得我配置Spring创建的bean的权限?

我在一个非Web应用程序中使用Spring,并计划按照LiorH的描述访问共享ApplicationContext对象.

修订

我接受下面的答案,但这是Martin Fowler的另一个选择,他讨论了依赖注入与使用服务定位器(与调用包装本质上相同ApplicationContext.getBean())的优点.

部分,福勒状态," 随着服务定位器应用程序类由一个消息给该定位器询问它[服务]明确地随着喷射没有明确请求时,服务出现在应用程序的类-控制的,因此反转.控制反转是框架的共同特征,但它的东西,是有代价的,它往往是很难理解,当你试图调试导致的问题.所以,整体来说,我宁可不去,[控制反转除非我需要它.这并不是说它是一件坏事,只是因为我认为它需要通过更直接的选择来证明自己的合理性. "

java spring

262
推荐指数
8
解决办法
34万
查看次数