我有多个线程在运行,它访问singleton对象并调用它的方法并在其中传递对象.在方法中,我只对收到的对象进行一些计算.我听说在这种情况下没有任何问题,因为它是无国籍的,而且对所有人都是免费的.
我的问题是它是如何免费的?我想知道多个线程如何在自己的线程中调用共享方法而不覆盖其他线程的传递对象?请明确内存分配和堆栈级别.
class Singleton class{
//no shared class or object variables and only one copy of this Singleton object exists.
Object someMethod(Object o){
//do some calculation or logic on the object o and return some string result
}
}
Run Code Online (Sandbox Code Playgroud) 我正在开发基于Spring Security Java的配置.
我创建了自己的MyAuthenticationProvider,我想在ProviderManager(单个实例AuthenticationManager)中注册.
我发现ProviderManager有一个提供商列表,我可以注册我的单一
MyAuthenticationProvider.
这是我配置的一部分:
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.authenticationProvider(MyAuthenticationProvider);
}
}
Run Code Online (Sandbox Code Playgroud)
我发现AuthenticationManagerBuilder了parentAuthenticationManager,defaultUserDetailsService等诸多领域.
我的问题是:
@Autowired注释在哪里添加AuthenticationManagerBuilderauth?是否AuthenticationManagerBuilder已在应用程序上下文中创建?AuthenticationManagerBuilder注入的默认状态是什么?默认情况下,状态我的意思是会不会有一些parentAuthenticationManager,authenticationProvider在S已经注册AuthenticationManagerBuilder?auth.authenticationProvider(MyAuthenticationProvider),这是否意味着我在添加一个提供商AuthenticationManagerBuilder?这是什么意思?摘自Spring文档
configureGlobal方法的名称并不重要.但是,仅在使用@EnableWebSecurity,@ EnableWebMvcSecurity,@ EnableGlobalMethodSecurity或@EnableGlobalAuthentication注释的类中配置AuthenticationManagerBuilder非常重要.否则会产生不可预测的结果.
我在Spring + hibernate中开发了一个Web应用程序,持续了几个月.我一直严重缺少的是异常处理.
我想知道处理异常的最佳方法和实践吗?我脑子里有一些问题,不能涵盖异常处理的所有方面,例如:
1.是否做出检查或未检查的例外?如何决定?
2.如何处理以及如何处理Controller中生成的异常.
3.关于在服务层和DAO层中生成的异常,应该只在该层处理还是应该转移到控制器层?
4.既然有许多例外情况,我怎么能准备好处理将来可能发生的事情?
5.如何向UI或浏览器显示相关消息?
请建议或提供好博客的链接?
我正在使用spring,hibernate创建一个Web应用程序.假设有多个用户想要注册.我将创建一个注册bean(原型或请求或会话作用域)并在Controller中自动装配它.
现在我将这个bean传递给注册服务(注释为"@transactional"注释),该注释也在控制器中自动装配.此服务将收到的注册bean对象传递给DAO(此DAO在服务中自动装配)如果服务和DAO是singelton,请求是否会被多个用户混淆?
这就是我所做的:我已经创建了服务范围和DAO作为"请求".这是正确的方法吗?或者我还能做些什么来制作服务和DAO singelton?
请求作用域后面的逻辑:将服务和DAO作为请求作用域的原因是多个用户调用registerationService.registerUser(bean); 从控制器同时和范围是singelton然后将没有一致性因为一个对象的方法被调用不同的输入.
让我知道我错在哪里.
注册Bean
@Component(value="registerBean")
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS, value = "request")
public class RegisterBean {
@NotNull
private String userName;
private String lastName;
@NotNull
private String firstName;
String email_address;
String password;
String confirmPassword;
String gender;
//getters and setters
}
Run Code Online (Sandbox Code Playgroud)
调节器
package com.ClickToShop.controllers;
@Controller
@SessionAttributes("user_info")
public class LoginPageController {
RegisterBean registerBean;//used
RegisterationService registerationService;//used
@Autowired
@Qualifier("registerationService")
public void setRegisterationService(RegisterationService registerationService) {
this.registerationService = registerationService;
}
@Autowired
@Qualifier("registerBean")
public void setRegisterBean(RegisterBean registerBean) {
this.registerBean = registerBean;
}
@ModelAttribute(value = "registerBean") …Run Code Online (Sandbox Code Playgroud) 我正在使用Jersey 2.10和jersey-spring3以及Spring 4.我想在泽西资源以及其他地方实现DI(基本上是服务)并且想要通过Java配置创建Spring Beans.
目前,我无法找到任何方法来做到这一点.知道怎么做吗?
我的web.xml看起来像这样
<web-app>
<display-name>Restful Web Application</display-name>
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>
org.glassfish.jersey.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>
jersey.config.server.provider.packages
</param-name>
<param-value>com.xyz</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/application-context.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
Run Code Online (Sandbox Code Playgroud) 我很困惑,无法理解为什么不应该吞下InterruptedException.
IBM的文章说
当阻塞方法检测到中断并抛出InterruptedException时,它会清除中断状态.如果捕获InterruptedException但无法重新抛出它,则应保留中断发生的证据,以便调用堆栈上方的代码可以了解中断并在需要时响应它
public class TaskRunner implements Runnable {
private BlockingQueue<Task> queue;
public TaskRunner(BlockingQueue<Task> queue) {
this.queue = queue;
}
public void run() {
try {
while (true) {
Task task = queue.take(10, TimeUnit.SECONDS);
task.execute();
}
}
catch (InterruptedException e) {
Thread.currentThread().interrupt();//preserve the message
return;//Stop doing whatever I am doing and terminate
}
}
}
Run Code Online (Sandbox Code Playgroud)
此外,Java Concurrency in Practice在第7.1.3章:响应中断中更详细地讨论了这一点.它的规则是:
只有实现线程中断策略的代码才可以吞下中断请求.通用任务和库代码永远不应吞下中断请求.
任何人都可以解释高级调用堆栈中的代码如何利用Thread.currentThread()设置的状态.insert(); 在线程终止时在catch块中?
还请解释上面的规则?
我在Spring学习Slf4j和log4j.我已经看到了我们使用一行的eyery
private final Logger logger = LoggerFactory.getLogger(name.class);
Run Code Online (Sandbox Code Playgroud)
我已经看到这是默认情况下获取root logger.
如何获得root logger?我错了吗?
如何获取log4j.xml文件中定义的其他记录器?
这是我的配置:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC
"-//APACHE//DTD LOG4J 1.2//EN" "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration xmlns:log4j="http://jakarta.apache.org/log4j/"
debug="false">
<appender name="CONSOLE" class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %5p %c{2}: %m%n" />
</layout>
</appender>
<appender name="ASYNC" class="org.apache.log4j.AsyncAppender">
<appender-ref ref="CONSOLE" />
<appender-ref ref="FILE" />
</appender>
<appender name="FILE" class="org.apache.log4j.RollingFileAppender">
<param name="File" value="C:/log/spring-hib.log" />
<param name="MaxBackupIndex" value="100" />
<layout class="org.apache.log4j.PatternLayout">
<param name="ConversionPattern" value="[%d{dd/MM/yy hh:mm:ss:sss z}] %5p %c{2}: %m%n" />
</layout>
</appender>
<logger name="com.example.foo">
<level value="DEBUG"/> …Run Code Online (Sandbox Code Playgroud) 如果已经存在,我如何防止hashmap或treemap替换先前的键值呢?另外,我想抛出异常来通知用户.
我一直在阅读DRY原则.尽管看起来很容易,但我很难理解我们在Web应用程序或Swing的任何项目中如何实现它?可能很少的例子会给我带头并帮助我发展我的思考过程.我曾尝试在Google上搜索,但找不到合适的内容.
java ×9
hibernate ×2
spring ×2
spring-mvc ×2
concurrency ×1
jersey-2.0 ×1
log4 ×1
rest ×1
slf4j ×1