1、@Controller、@Service、@Repository、@Component 注解的类会纳入 Spring 容器中进行管理,在需要使用的时候,只需要注入即可。
2、@Controller 用于标注控制层组件;@Service 用于标注业务层组件;@Repository 用于标注数据持久化层组件;@Component 泛指组件,用于标注不好归类的组件。
3、默认情况 bean 的名称为类名(首字母小写),可以通过 value 属性自定义 bean 的名称。默认情况下 bean 是单例的,可以使用 @Scope 注解指定。
4、代码举例如下:
4.1、持久化层:
import org.springframework.stereotype.Repository;
//默认 bean 的名称为类名首字母小写 BookServiceImpl
@Repository
public class BookRepository {
public void deleteById(long id) {
System.out.println("根据主键删除 id=" + id);
}
}
4.2、业务层:
public interface BookService {
void deleteById(long id);
}
import com.wmx.web_app.repository.BookRepository;
import com.wmx.web_app.service.BookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
//使用 value 指定 bean 的名称,默认为类名首字母小写 BookServiceImpl
@Service(value = "bookServiceImpl")
public class BookServiceImpl implements BookService {
@Autowired //根据类型注入
private BookRepository bookRepository;
@Override
public void deleteById(long id) {
bookRepository.deleteById(id);
}
}
4.3、控制层:
import com.wmx.web_app.service.BookService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
//@RestController 等同于在整个类上加了 @ResponseBody,表示类中所有的方法返回值都直接返回给页面
//对于前后端分离的项目,@RestController 更加方便
@Controller
public class BookController {
//根据名称注入
@Resource(name = "bookServiceImpl")
private BookService bookService;
/**
* http://192.168.2.77:8080/deleteById?id=99890
*
* @param id
* @return
* @ResponseBody 注解表示将返回的内容直接输出到页面
*/
@GetMapping("deleteById")
@ResponseBody
public String deleteById(@RequestParam long id) {
bookService.deleteById(id);
return "删除成功:" + id;
}
}