簡體   English   中英

設計模式-不帶DI框架的Webapp

[英]Design patterns - webapp without DI framework

我需要在沒有依賴項注入框架的情況下實現servlet 3.0 webapp。 哪種解決方案是最好的做法是什么? (就性能/內存使用情況和可伸縮性而言)

1)DAO和服務層的靜態方法

@WebServlet("/welcome")
public class MyController extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {

        MyService.doSomething(/*args*/);
    }
}

public class MyService {

    public static void doSomething(/*args*/) {
        MyDAO.crud(/*args*/);
    }
}

public class MyDAO {

    public static void crud(/*args*/) {
        //...
    }
}

2)接口

@WebServlet("/welcome")
public class MyController extends HttpServlet {

    private MyService myService;

    public MyController() {
        super();
        if (myService != null) {
            myService = new MyServiceImpl();
        }

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
        throws ServletException, IOException {

        myService.doSomething(/*args*/);
    }
}

public interface MyService {

    void doSomething(/*args*/);
}

public class MyServiceImpl implements MyService {

    private MyDAO myDAO;

    public MyServiceImpl() {
        if (myService != null) {
            myDAO = new MyDAOImpl();
        }
    }

    @Override
    public void doSomething(/*args*/) {
        myDAO.crud(/*args*/);
    }
}

public interface MyDAO {

    void crud(/*args*/);
}

public class MyDAOImpl implements MyDAO {

    @Override
    public void crud(/*args*/) {
        //...
    }
}

3)其他...

謝謝。

最好使application MyServiceMyDAO都為stateless 您可以將它們都設置為singletons (這是所有spring注入的beansdefault范圍),只需在controller使用它即可。 由於它是無stateless因此concurrency問題沒有問題。

不要使用靜態方法,因為它無法被模擬或注入。 盡管假設dao不在內存中(並且本身不是有狀態的),但它是線程安全的。

為什么沒有框架就必須這樣做?

查看是否要實現單例而不是創建一個

類public class FetchBean {

 static Map<String, Object> beans; static { beans = new HashMap<String, Object>(); } public static Object getBean(Class bean) { try { if (!beans.containsKey(bean.getName())) { Object instance = bean.newInstance(); beans.put(bean.getName(), instance); } return beans.get(bean.getName()); } catch (Exception e) { e.printStackTrace(); } return null; } public static void main(String[] args) { Person person = (Person) FetchBean.getBean(Person.class); person.setName("Taher"); System.out.println(person.getName()); Person person2 = (Person) FetchBean.getBean(Person.class); person2.setName("Tinwala"); System.out.println(person2.getName()); } } 
public class Person {

    public Person() {
        System.out.println("In person");
    }

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM