是什么区别@RequestParam和@PathVariable同时处理的特殊字符?
+被@RequestParam空间接受了.
在这种情况下@PathVariable,+被接受为+.
我想知道当你用方法注释方法时实际发生了@Transactional什么?当然,我知道Spring会将该方法包装在Transaction中.
但是,我有以下疑问:
注意:由于此机制基于代理,因此只会拦截通过代理进入的"外部"方法调用.这意味着'自调用',即目标对象中调用目标对象的其他方法的方法,即使被调用的方法被标记,也不会在运行时导致实际的事务
@Transactional!
资料来源:http://static.springsource.org/spring/docs/2.0.x/reference/transaction.html
为什么只有外部方法调用才会在Transaction下而不是自调用方法?
我有一个发送到服务器和从服务器发送的用户对象.当我发出用户对象时,我不想将散列密码发送给客户端.所以我添加@JsonIgnore了密码属性,但这也阻止了它被反序列化为密码,这使得在没有密码时很难注册用户.
我怎样才能@JsonIgnore应用于序列化而不是反序列化?我正在使用Spring JSONView,所以我没有很多控制权ObjectMapper.
我试过的事情:
@JsonIgnore物业@JsonIgnore仅添加getter方法我正在阅读spring 3.0.x参考文档以了解Spring Autowired注释:
我无法理解下面的例子.我们是否需要在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?
我想在文件中记录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语句?
我有一堆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?
我有一个使用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) 包括我:
所有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) 我想将一个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值设置为无效,则在启动应用程序上下文时不会发生错误.
我问了一个普通的Spring问题:自动转换Spring Beans并让多个人回应,ApplicationContext.getBean()应该尽可能避免调用Spring .这是为什么?
我还应该如何获得我配置Spring创建的bean的权限?
我在一个非Web应用程序中使用Spring,并计划按照LiorH的描述访问共享ApplicationContext对象.
修订
我接受下面的答案,但这是Martin Fowler的另一个选择,他讨论了依赖注入与使用服务定位器(与调用包装本质上相同ApplicationContext.getBean())的优点.
部分,福勒状态," 随着服务定位器应用程序类由一个消息给该定位器询问它[服务]明确地随着喷射没有明确请求时,服务出现在应用程序的类-控制的,因此反转.控制反转是框架的共同特征,但它的东西,是有代价的,它往往是很难理解,当你试图调试导致的问题.所以,整体来说,我宁可不去,[控制反转除非我需要它.这并不是说它是一件坏事,只是因为我认为它需要通过更直接的选择来证明自己的合理性. "
spring ×10
java ×8
annotations ×2
spring-mvc ×2
autowired ×1
hibernate ×1
jackson ×1
json ×1
junit ×1
logging ×1
mockito ×1
spring-3 ×1
spring-aop ×1
spring-boot ×1
spring-jdbc ×1
tomcat7 ×1