1) controller 使用与解释
package com.qs.controller; import com.qs.entity.CategoryFilter; import com.qs.service.ICategoryFilterService; import com.qs.service.impl.CategoryFilterServiceImpl; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import org.springframework.ui.Model; import javax.annotation.Resource; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** * Created by guonan on 15/8/31. */ /** * 使用 @Controller 之后,则该对象交给 Spring 管理, 会产生一个驼峰命名 standardController 的 bean。 * 这个命名根据 StandardController 的类名获得 * * 如果使用下面的写法 * @Controller("standardController") || @Controller(name = "standardController") * 则 bean 的名称取 「“”」里的值 * * @Scope("prototype")表示: * 非单例模式, 每次请求都将单独建立一个 StandardController 对象可以保证线程(影响数据)相对安全 * * 若不使用该注释,则表示: * scope 是单例模式(scope="singleton"), 只会创建一个 StandardController 对象, * 每次访问都是同一 StandardController 对象, 线程(影响数据)不安全 * */ @Controller @Scope("prototype") public class StandardController { /** * 建议使用@Resource(低耦合), 不推荐 @Autowired(该注释方法侵入性强) * * @Resource 装配顺序: * 1) 如果同时指定了name和type,则从Spring上下文中找到唯一匹配的bean进行装配,找不到则抛出异常 * 2) 如果指定了name,则从上下文中查找名称(id)匹配的bean进行装配,找不到则抛出异常 * 3) 如果指定了type,则从上下文中找到类型匹配的唯一bean进行装配,找不到或者找到多个,都会抛出异常 * 4) 如果既没有指定name,又没有指定type,则自动按照byName方式进行装配(见2); * 如果没有匹配,则回退为一个原始类型(UserDao)进行匹配,如果匹配则自动装配; * * @Resource(name = "iCategoryFilterService") * 在 StandardController 声明的 iCategoryFilterService 类型必须是 *「 ICategoryFilterService || ICategoryFilterServiceImpl 」 * 否则会由于类型不一致而无法注入 * * 程序中使用了 @@Resource(name = "iCategoryFilterService"), 装配流程如下: * 1) Spring 实例化一个名为 iCategoryFilterService 的bean * 2) 当 Spring 发现 StandardController 的成员变量 iCategoryFilterService 上有 @Resource 注释时 * 3) Spring 会把名为 iCategoryFilterService 的bean 注入给 iCategoryFilterService 这个成员变量, * 完成依赖注入 * * PS. 如果没有 Spring 还像使用 iCategoryFilterService 这个成员变量的做法则是传统的new方法 * ICategoryFilterService iCategoryFilterService = new ICategoryFilterServiceImpl(); * Spring 的依赖注入完成了 IoC(控制反转)的过程,在这里控制反转的意思指的是: * a. StandardController 想使用成员变量 iCategoryFilterService , 本应该去主动 new 出对象 * b. 使用 Spring 之后, 创建实力的工作已经交给 Spring , 而真正使用者(StandardController) * 则需要让 Spring 把已经实例化完成成员变量(iCategoryFilterService)交给自己使用 * * 依赖注入(DI)和控制反转(IoC)其实是要表达的是一个意思, 但是个人感觉依赖注入(DI)更为准确的概括了上述过程。 * */ @Resource(name = "iCategoryFilterService") ICategoryFilterService iCategoryFilterService; @RequestMapping(value = "/get/all", method = RequestMethod.GET) //注释 @ResponseBody 的使用, 可以将 Map 以流的方式在浏览器中直接显示出来 @ResponseBody public Map<String,Object> getAll(Model model) { List<CategoryFilter> list = iCategoryFilterService.getAll(); Map<String, Object> map = new HashMap<String, Object>(); map.put("1",list); return map; } }
2)service
3) DAO
时间: 2024-10-13 23:29:45