java - Scope of Controllers ,Service,Repository in Spring Web Application? -
i creating web application using spring ,hibernate. suppose multiple users wants register.i create registration bean(prototype or request or session scoped) , autowire in controller.
now passing bean registration service(annotated "@transactional" annotation) autowired in controler. service pass recieved registeration bean object dao(this dao autowired in service)if service , dao singelton would'nt requests mixed multiple users?
here have done :i have created scope of service , dao "request". right approach? or else make service , dao singelton?
my logic behind request scoped: reason making service , dao request scoped if multiple users call registerationservice.registeruser(bean); controller @ same time , scope singelton there no consistency coz there 1 object's methods called different inputs.
let me know wrong.
registeration 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 , setters } controller
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") registerbean returnmodelattribute() { return registerbean; } @requestmapping(value = "/login-page.html") public string showloginpage() { system.out.println("showing login page"); system.out.println(registerbean); return "login-page"; } @requestmapping(value = "/newuser-register", method = requestmethod.post) public string registernewuser( @modelattribute("registerbean") @valid registerbean bean, bindingresult result,final redirectattributes redirectattr) throws nosuchalgorithmexception, unsupportedencodingexception { //some validation code registerationservice.registeruser(bean); return "redirect:successregisteration"; } } } service layer @service("registerationservice") @transactional @scope(proxymode = scopedproxymode.target_class,value="request") public class userserviceimpl implements registerationservice { private user_details_pojo usertoregisterpojo; private abstracthibernatedao userdao; @autowired public void setuserdao(abstracthibernatedao userdao) { userdao = userdao; } @autowired @qualifier("usertoregisterpojo") public void setusertoregisterpojo(user_details_pojo usertoregisterpojo) { this.usertoregisterpojo = usertoregisterpojo; } //main implementation code starts here @override public void registeruser(object userbean) { registerbean bean=(registerbean) userbean; //bean or model converted pojo userdao.save(usertoregisterpojo);//calling dao specified pojo } } dao:
public abstract class abstracthibernatedao<t extends serializable> { public class<t> clazz;//class object reference protected sessionfactory mysessionfactory; @autowired public void setmysessionfactory(sessionfactory mysessionfactory) { this.mysessionfactory = mysessionfactory; } public t findonebyname(final string name){ return (t) getcurrentsession().createquery("from "+clazz.getname()).uniqueresult(); } public void setclazz(final class<t> clazztoset) { this.clazz = clazztoset; } public t findone(final long id) { return (t) getcurrentsession().get(clazz, id); } @suppresswarnings("unchecked") public list<t> findall() { return getcurrentsession().createquery("from " + clazz.getname()).list(); } public void save(final t entity) { getcurrentsession().merge(entity); } public void update(final t entity) { getcurrentsession().update(entity); } public void delete(final t entity) { getcurrentsession().delete(entity); } public void deletebyid(final long entityid) { final t entity = findone(entityid); delete(entity); } protected session getcurrentsession() { return mysessionfactory.getcurrentsession(); } } concrete dao
@repository @scope(proxymode = scopedproxymode.target_class,value="request") public class userdao extends abstracthibernatedao<user_details_pojo>{ }
the services , daos should stateless. allow configure them spring singletons. hope mean when "singleton".
all threading concerns, including thread pooling, taken care of infrastructure: web/java ee server , spring di.
NICE POST.
ReplyDeletejava online training
java training