Rahmen-Steuerungen ,Service,Repository im Frühling Web-Anwendung?

Ich bin erstellen einer web-Anwendung mit spring ,hibernate.
Angenommen, mehrere Benutzer registrieren möchte.Ich erstelle eine Registrierung bean(Prototyp-oder request-oder session-scoped) und autowire es in den Controller.

Leite ich nun diese Bohne zu Registration Service(kommentiert mit "@transactional" - Anmerkung), die auch autowired in den controler.
Dieser service wird pass erhielt registeration bean-Objekt von DAO(Das DAO ist autowired in den Dienst), Wenn service-und DAO sind singelton würde nicht die Anforderungen verwechselt werden, die für mehrere Benutzer?

Hier ist, was ich getan habe :ich habe den Umfang der service-und DAO-als "Anfrage".
Ist das der richtige Ansatz? oder was sonst könnte ich tun, um den service-und DAO-singelton?

Meiner Logik hinter request scoped:
Der Grund für das service-und DAO als request-scoped ist, wenn mehrere Benutzer Anruf
registerationService.registerUser(bean); von der Steuerung zur gleichen Zeit und Umfang ist singelton dann würde es keine Konsistenz, da es dort ein Objekt, dessen Methoden aufgerufen werden mit unterschiedlichen Eingaben.

LASSEN SIE MICH WISSEN, WO ICH FALSCH BIN.

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 and 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 is converted to pojo


            UserDAO.save(userToRegisterPojo);//calling DAO with 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();
    }
}

Konkrete DAO -

@Repository
@Scope(proxyMode = ScopedProxyMode.TARGET_CLASS,value="request")
public class UserDAO extends AbstractHibernateDAO<User_Details_Pojo>{


}
InformationsquelleAutor beinghuman | 2013-08-30
Schreibe einen Kommentar